2009年4月29日星期三

你看得懂2009年4月27日Google 首页图标什么意思吗?

  网友发现新大陆发帖:今天(4月27日),我到Google上搜索,突然发现彩色的Google标志变成了两条横排的线条,断断续续,看不懂!我以为网站被黑了,刷新后依然如此,上面也没个解释。不过,搜索功能倒没有瘫痪,还好使的,难道Google改变标志了,有谁知道吭一声啊。
  【网友声音】
  荒城:呵呵,我也以为被人攻击了。
  一脸清秀:Google的事,关你什么事。
  发现新大陆:不关我的事,可是关Google的事,Google的事就是大家的事。
  金钱:谁搞清楚了,发红包。
  流火:傻了吧,告诉你们,这是为了纪念萨缪尔・摩尔斯的诞辰,Google特有的纪念方式。
  没内涵的水:萨缪尔・摩尔斯是干嘛的?
  流火:是美国发明家,摩尔斯电码的创立者。今年4月27日是萨缪尔・摩尔斯诞辰308年,Google在第一时间推出了纪念Logo以纪念这位伟大的科学家。发现没,此次logo与往常纪念logo有所不同,外形已经看不出google的字样,其实这就是由google这几个字符转换为摩尔斯电码后的形状。
  发现新大陆:有谁知道更详细的?
  佚名:摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它由美国人艾尔菲德・维尔在1835年发明,当时他正在协助萨缪尔・摩尔斯进行摩尔斯电报机的发明。摩尔斯电码是一种早期的数码化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:点、划、点和划之间的停顿、每个字符间短的停顿、每个词之间中等的停顿等。

Google电码版Logo纪念电报之父[转自东方早报]

 早报讯 昨天是萨缪尔·芬利·布里斯·摩斯诞辰308年,这位颇有影响的美国画家兼出版商,同时也是一位发明家,创造了通信交流的全新方式——摩斯电码。Google在27日第一时间推出了纪念Logo以纪念这位伟大的科学家。此次Logo与往常纪念logo有所不同,外形已经看不出“google”字符字样,但是其实这就是“google”这几个字符转换为摩斯电码后的形状。
  最早的摩斯电码是一些表示数字的点和划。数字对应单词,需要查找一本代码表才能知道每个词对应的数。用一个电键可以敲击出点、划以及中间的停顿。
  虽然摩斯发明了电报,但他缺乏相关的专门技术。他与Alfred Vail签订了一个协议,让他帮自己制造更加实用的设备。Vail构思了一个方案,通过点、划和中间的停顿,可以让每个字符和标点符号彼此独立地发送出去。他们达成一致,同意把这种标示不同符号的方案放到摩斯的专利中。这就是现在我们所熟知的美式摩斯电码,它被用来传送了世界上第一条电报。
  电报公司根据要发的信的长度收费。商业代码精心设计了五个字符组成一组的代码,作为一个单词发送。比如:BYOXO ("Are you trying to crawl out of it?");LIOUY ("Why do you not answer my question?");AYYLU ("Not clearly coded, repeat more clearly.")。这些五个字符的简语可以用摩斯电码单独发送。在网络用词中,我们也会说一些最常用的摩斯商用代码。现在仍然在业余无线电中使用的有Q简语和Z简语:它们最初是为报务员之间交流通信质量、频率变更、电报编号等信息服务的。
  作为一种信息编码标准,摩斯电码拥有其他编码方案无法超越的长久的生命。摩斯电码在海事通讯中被作为国际标准一直使用到1999年。1997年,

网络面试题库谷歌评价最差

求职者参加面试时要准备回答各种各样的问题。美国一家网站收集了大量企业面试问题,供求职者参考。
glassdoor网站定于28日推出企业面试题库。这家网站以前只列出世界各大企业的员工收入水平和网友对企业的评价。
题库搜集的问题五花八门。“什么时候可以撒谎?你在7月份可以用100棵圣诞树做什么?如果你是一碗麦片粥,你是哪种麦片粥?”
网站首席执行官罗伯特·霍曼说:“面试机会很珍贵。掌握这些信息有助于减少面试给求职者带来的焦虑并增加自信。”
这家网站已搜集关于1000多家企业的将近2000份求职经历。
网站说,面试最容易的企业是美国银行,最难的是亚马逊公司;应聘者对普华永道会计师事务所面试的评价最正面,对谷歌面试的评价最负面。

2009年4月28日星期二

CSLA.NET框架实现之数据访问门户设计

数据访问门户是通过使业务对象能在客户端和服务器之间移动来实现“移动对象”,把通道适配器模式和消息路由模式合并起来,提供客户端对服务器访问的单一的入口。
业务开发人员使用Csla.DataPortal来创建、提取、更新和删除所有的业务对象数据,下表是数据访问门户业务对象要实现的方法:
表3:业务对象要实现的方法
操作
解释
Create
调用Csla.Server.DataPortal对象,然后调用DataPortal_Create()
Fetch
调用Csla.Server.DataPortal对象,然后调用DataPortal_Fetch()
Update
调用Csla.Server.DataPortal对象,然后调用DataPortal_Update()
Delete
调用Csla.Server.DataPortal对象,然后调用DataPortal_Delete()
Execute
调用Csla.Server.DataPortal对象,然后调用DataPortal_Execute ()
整个数据访问门户调用的流程如下:
图8:数据门户调用逻辑
总结上面的这张调用顺序图。首先,客户端Csla.DataPortal通过通道适配器,以四种代理方式对服务端提供的三个接口进行进程调用,以便实现客户端到服务端Csla.Server.DataPortal最终的调用;然后,服务端Csla.Server.DataPortal通过System.Transations提供的分布式事务处理技术调用Csla.Server.SimpleDataPortal中的实例;最后,Csla.Server.SimpleDataPortal利用消息路由技术最终实现对数据库的访问。
这个流程中还有一个非常重要的概念,就是“配置信息与运行位置的无关性”,意思是在客户端和服务器上配置的信息在进行数据访问的过程中拥有安全的位置无关性。下面具体地研究数据访问门户的实现。

网站被黑原因,sql注入式攻击,网站挂马防范

1、网站被黑的原因
此次我们网站遭到的是sql注入攻击,具体攻击目标是数据库中存放2009年1月份数据表,黑客修改了这张表的一个字段的信息,导致了我们网站被嵌入带有威胁的js代码。
2、解决办法
到目前为止,我们已经把整个数据库的所有记录信息都进行了排查、消除了所有带有危害的数据,我们也已经把所有容易受到攻击的端口关闭(ftp的21端口)、并重新设置数据库的用户名和密码;另外,开发人员和系统人员都在努力寻找和修补在Web服务器上可能存在的sql注入漏洞。
3、未来防范策略
(1)、严格限制对sql server数据库的访问权限;
(2)、对网站的sql语句进行全面排查,确保所有对数据库请求操作都进行字符串过滤;
(3)、关闭除了80和443以外的其他所有端口;
(4)、定期对数据库最可能受攻击的数据进行安全检查。

我们网站被sql注入攻击了,网站挂马,sql注入攻击

从来没有想到过,我们的网站居然被黑了!!而且是sql注入式攻击!就是这段可恶的代码“3b3.org/c.js”,因为这个原因,合作网站关闭了我们的频道,这两天查看sql server的数据库事务日志和IIS日志,都没有查到是那段代码被注入了。
不过幸好已经将IIS访问数据库的权限设置为Select了。希望能够尽快找到,并且消除漏洞!

“谷歌地球” 现英文字母表[转自沈阳晚报]

  据英国媒体近日报道,澳大利亚一名男子花6个月时间,最近终于从谷歌卫星地图图像中找齐了酷似26个英文字母的26处自然或人文景观,并把它拼成了英文字母表。据悉,这些景观全都来自于他的家乡维多利亚州。
  这名男子叫雷特·达斯伍德,现年32岁,是一名平面设计师。在业余时间里,他通过浏览和搜索“谷歌地球”(Google Earth)的太空卫星照片,找到了这些形似26个英文字母的景观。据达斯伍德介绍,这些图片完全是他手工搜索,一小片一小片区域地浏览,不断放大图像加以筛选,最终找出来的,没有用任何特技修改过。
  虽然经过了漫长的半年时间才拼出一整幅字母表,但达斯伍德并不觉得辛苦。他说:“这要比数独游戏更好玩。”
  阅读帮助
  “谷歌地球”是互联网巨头谷歌公司2005年推出的一款虚拟地球仪软件,它把卫星照片、航空照相和地理信息系统布置在一个地球的三维模型上,使用者可以通过这个软件浏览全球各地的高清晰度卫星图片。自这项服务问世以来,人们已经从卫星照片中发现了许多奇特的地球景观,比如莫桑比克境内的原始森林、古代印第安人建筑遗迹、数千年荒弃的阿富汗村庄、营地旧址、小型城堡、墓地、水库和地下水道等。
  不过这款软件在给人们带来方便的同时,也暴露了涉及军事、安全和隐私等方面的内容,引起不少人不满。美国国防部就曾多次要求谷歌地球删除或模糊化对美国军事不利的照片。

2009年4月25日星期六

CSLA.NET框架的.NET实现

CSLA.NET框架是在.NET技术支持下开发的,它大量使用.NET提供的技术,同时也大量使用面向对象设计的思想,比如封装、抽象、继承、多态。
表2:CSLA.NET框架目录
目录
设计用处
Core
包含所有Csla.Core中的类型
Data
包含所有Csla.Data的类型
DataPortal
开发人员需要调用的数据门户
Delete
想要删除的对象
DataPortal\Client
Csla.DataPortal和Csla.DataPortalClient
DataPortal\Host
Csla.Server.Host宿主类,主要是提供不同方式的数据门户
DataPortal\Server
服务器数据门户,Csla.Server类型
Security
自定义身份验证类Csla.Security
Vlidation
规则验证类Csla.Validation
整个框架实现主要分三大部分:基础类库的实现(包含业务逻辑)、数据访问门户实现、框架支持类库实现。

谷歌音乐梦想承载的意义[转自经理日报]

  谷歌终于在中国推出了音乐搜索,这个经历两年艰辛才推出的音乐搜索让谷歌中国高层几乎喜极而泣——这意味着对抗百度的MP3搜索,谷歌终于不再赤手空拳;意味着谷歌总部终于在全球统一战略和本土化的平衡上做了让步;意味着探索正版数字音乐的赢利模式向前迈开了坚实的一步。
  在中国搜索市场,谷歌仅占了20%多的市场占有率,而百度的市场份额高达60%。而MP3搜索带来的流量占去了百度总流量的10%。因为涉及到知识产权保护,谷歌在音乐搜索上迟迟不启动。可以想象,补上这个缺,对于处处被拿来与百度比较的谷歌来说,不仅仅会带来流量上的增加,还有在满足用户服务方面的进步。
  对于谷歌本身来说,音乐搜索的推出了证明了谷歌在发展区域业务上更加的灵活。美国的互联网巨头们常用的是以美国模式套用到全球各国,这种方式在到了亚洲就频频碰壁。远的不说ebay、yahoo等,就说Google, 在全球大部分国家Google都处于绝对的领先位置,但在中国、俄罗斯、韩国和日本,Google却只能当“遥远的老二。因为全球统一的决策权,在产品和服务上的本土化方面,跟竞争对手相比有相当的距离。
  这次音乐搜索业务仅仅在中国内地推出,据称是谷歌中国团队历经了两年的艰辛,反复跟总部协商、说服,反复和唱片公司谈判等才大功告成。李开复感慨的说,这说明了总部的放权。谷歌总部难以理解中国用户对数字免费音乐的喜好,也难以理解竞争对手为什么可以通过MP3搜索、百度知道等特色业务达到这么大的市场份额。对音乐搜索在中国的放行,说明谷歌总部在尊重本土用户习惯上,又跃上了一步。
  与国内众多的音乐搜索不同的是,谷歌特别强调是音乐是正版的,这也是数字音乐探索新赢利模式的一个新尝试。通过合作伙伴巨鲸音乐网,谷歌用钱咂开了砸开了四大唱片公司(索尼BMG、环球、百代、华纳)的大门,从而与众多家唱片公司签定了合约。这使得谷歌音乐搜索不是索引互联网上的音乐,而是直接拿第三方的资源来提供搜索下载。
  音乐版权涉及到的多方的合作模式是怎么样的,现在的推测是谷歌通过合作伙伴购买歌曲的授权,给了唱片公司“保底费”,并许诺给出版商广告分成。但目前音乐广告方面还处于培育阶段,唱片公司的利益如何保证?歌曲上承担的广告有限,广告费用能否弥补版权费,都是不明确的,新模式的探索还需要时间和创新。
  谷歌音乐梦想起航了,对于谷歌本身增强竞争力、对于中国的数字音乐赢利模式的建立,都意义重大,尽管这还只是刚刚开始。

宝洁与谷歌的另类营销“搭档”[转自经理日报]

  宝洁公司的企业文化一向相当保守,以至于员工们会戏称自己为“宝洁的呆瓜”。而在谷歌却随处可见骑着公司提供的踏板车、随时在公共白板上表达创意、记录灵感的员工。现在,这对另类的“搭档”认为他们可以互相取长补短,所以着手开展了一项互换员工的计划。  
  两家公司之间交换员工的想法始于两年前。当时,宝洁公司全球市场官JimStengel对公司有史以来最大的洗衣皂革新之一(改用高浓缩配方的小包装瓶)表示出担忧,因为新的洗衣皂推广方案难以确定关键字,以便开展搜索营销。如果没有网上营销方案,那些想弄清包装为何缩小的汰渍用户可能就无法访问汰渍网站。
  在和谷歌负责美洲广告销售和运营的TimArmstrong会面后,JimStengel和TimArmstrong翻来覆去地讨论了互换员工的想法。最终,这项合作计划在2008年1月付诸实施。
  一种更加紧密的联系对双方来说都至关重要。作为全球最大的广告主,宝洁公司意识到购买洗衣粉、卫生纸和护肤霜的新一代消费者如今花在网上的时间超过了看电视。而谷歌则希望在宝洁公司每年87亿美元的广告大饼中分享更大的份额。
  相互“磨合”
  随着两家公司合作的不断推进,双方之间的巨大差异迅速显现出来。去年4月,当女演员SalmaHayek雄心勃勃地为宝洁公司的帮宝适品牌进行促销时,谷歌的员工吃惊地发现,帮宝适并未邀请任何“妈妈”博主(开设有关育儿内容热门博客的女性)出席新闻发布会。
  一名谷歌员工疑惑地问道:“博主在哪里?”而对于宝洁公司的员工来说,他们在一次与汰渍品牌有关的会议上惊讶地发现,谷歌的一名员工显然没有意识到汰渍的标志性橙色包装是汰渍品牌形象的一个重要组成部分。
  不久前,谷歌销售团队经理DeniseChudy向十几名宝洁公司员工展示了谷歌的一些数据,引发了不小的轰动。这些数据表明,在过去一年里,“优惠券”一词在网上的搜索量大约增加了50%。
  宝洁公司市场经理CatherineDuval-Russell在公司内部的博客上写道,跟踪网上搜索是“我在谷歌第一个星期学到的最好的知识之一”。
  作为互换合作的一部分,2008年3月,一群谷歌和宝洁公司的员工挤进了宝洁公司在辛辛那提总部的档案室,研究汰渍品牌62年的历史。这样的活动是宝洁公司培训未来品牌经理的一个重要组成部分。
  谷歌员工JenBradburn认真研读宝洁公司数十年的营销材料,并记笔记(这些材料全都在醒目位置标有汰渍的亮橙色标志)。她开玩笑说:“这提醒我不要对橙色掉以轻心。”此话得到了在场的宝洁员工的齐声赞同。
  潜移默化的改变
  作为两家公司合作的第一个成果,他们举办了一次网上营销活动,邀请人们制作宝洁公司“污渍会说话”电视广告的搞笑视频,并将它们上传到YouTube上。这则去污渍广告最早在橄榄球超级杯赛期间播出,镜头中一名应聘者被衬衫上一个会说话的污渍弄得狼狈不堪,每当他要说话时,这个污点就胡说一气。
  当然,搞笑类型的视频推广活动可能存在风险。假如有人张贴对产品和品牌不利的内容,或者根本没人参加相关的活动怎么办?
  在最终提交的227个搞笑视频中,宝洁公司选取了不少优秀作品在电视上播出,此次活动取得了成功。宝洁公司表示,汰渍计划在未来使用更多由消费者制作的内容。
  另一方面,谷歌的员工也开始逐渐熟悉宝洁公司的专门用语。在一次评估店内展示的活动中,一名宝洁公司的营销人员介绍了公司的标准方法,即“停下、停留、成交”。Lichtig介绍说,产品包装首先要吸引购物者“停下”,然后“停留”下来阅读标签,最后“成交”是指购物者把产品放进购物车。
  谷歌的Chudy小姐深得要领。她说:“这就像我们的文字广告一样。”“广告标题”是浏览者“停下”,“描述”是“停留”,而“成交”是“点击访问网站”。她说:“通过学习他们的语言,交流就变得更加容易了。”

2009年4月23日星期四

为什么减少我的收录,Google?

前两天google收录我的Google博客,而且数量很多,我还沾沾自喜,可是今天site了一下,发现网站的收录量急剧下降!!为什么呢??难道是我没有原创的?可是大部分博文都是我自己在开发过程中总结的啊!不可否认,部分的文章是参考了很多其他的网站信息,对于这些文章可以把排名放在后面,可是google你也不能就把我删除在收录之外啊!!
对Google博客很失望,但是再坚持一段时间,本人博客很多都是自己在网站开发中的总结,都是非常有用的,绝对不是随便大量采集过来的。

北京2009年的第一场雪

昨天下了好大的雨,这恐怕是北京2009年下的真正的一场雨,大雨从早上下到晚上,特别到晚上的时候,哗啦啦地下了两个多小时,我喜欢这样的雨,特别是春天和夏天。“有福天赐雨”,喜欢情深深雨蒙蒙的雨,也喜欢倾盆大雨。
晚上下了班之后骑车回来,烟雨朦胧了北京城,很舒服的感觉,突然有点江南的味道,只不过自己的裤子挨弄湿了。很长一段时间来沉于程序开发中,却忽略了环境,忽略了春意。
一场春雨,一份滋润,播种了我的希望。

如何防范网站挂马,网站漏洞

做网站有一年的时间了,因为之前网站流量很小,从来没有遇到过网站被挂马的情况,可是就在昨天,网站挂马了!从昨天晚上开始到今天,忙活了一阵,新亏今天发现了,而且问题也不是非常严重。网上查了一下,很多原因会导致网站挂马,但是归结都是下面的两个类型:
1、服务器漏洞
服务器的漏洞是最需要防范的,如果服务器是你自己的,那么就应该进行合理的权限配置和封堵已知的漏洞,这一点尤其在Windows主机上尤为重要,如果是Liunux服务器,则相对安全一些,但对管理员的水平要求也更高。而如果你的网站没有自己的服务器,或者只是简单的虚机租用,那就只能希望你所选择的ISP是一个过硬的服务商了。
2、网站程序漏洞
这一点也很要命,比如像脚本入侵,sql注入攻击等都是很经常的事情。这要靠开发人员不断提升自身能力外,没有别的办法。这里提醒一点,最好不要使用基于网上下载的源码的网站,因为这些公开源码的东西,早就被有心之人研究透了,如果你不熟悉就贸然使用,后果不堪设想。
我的网站就是因为服务器的windows补丁没有及时更新,服务器被入侵了,我一直坚信“魔高一尺,道高一丈”,没有不可攻克的黑客攻击,只要多注意就可以了。

寻找成功的秘诀

很多人都想找到成功的秘诀,而许多成功人士都说:其实没有成功秘诀,有的只是坚持。以下是自己勉励自己的一些只言片语:
1、用情人般的眼神,婴儿般的微笑——面对自己的爱人;
2、反正死不了——做什么事要大胆;
3、丢开无谓的争论、丢弃面子、摘下虚伪的面具——工作要踏实努力;
4、天人合一;
5、把一件简单、正确的事坚持做到其他人放弃的时候,你就成功了!

网站实现架构:关于动态网站和静态网站的想法

互联网的最初都是静态页面(也就是最初的html页面),接着出现了一些服务端的脚本语言(比如CGI、Perl),然后就是ASP、PHP、Java等。那么网站到底应该做成动态呢还是静态呢?
对于这个问题很多人的见解都不一样,有些人认为网站应该静态,因为这样不会给数据库压力,而且简易,还可以优化搜索引擎;有些人则认为动态网站好,因为页面统一,方便修改,而且节省空间,更容易维护。
我自己是做网站的,而且大多是动态网站,其实没有说什么类型的好,关键在于使用范围,对于大型新闻网站,因为页面基本不变,最好肯定是静态化新闻;但是对于交互性的,或者变动性比较大的网站,最好使用动态网站。
静态网站流量大了之后压力在于web服务器,现在已经有F5这类的东西来解决了;动态网站的压力则在于数据库服务器,不过也有Memecached这样的分布是数据库缓存来解决。而对于不管是动态网站还是静态网站都需要的图片、文件信息,则有Squid这样的软件了左缓存,以保护文件信息.

开源框架CSLA.NET研究之框架设计

CSLA.NET框架是一个非常优秀的框架,能够真正地实现构建大多数业务应用程序所需要的框架,特别地,这个框架在业务逻辑上面提供了异常强大的支持,包括业务逻辑N层撤销能力、移动对象、业务规则跟踪、业务授权规则、同一个对象拥有多种用户界面、Windows和Web Form的数据绑定,以及分布式事务处理的集成,而这些东西是开发人员在开发中最头痛的东西,现在CSLA.NET把这些都封装起来了,那么开发人员就可以把注意力都集中到业务需求上面来。
(1)、设计思想
开发人员最希望看到的是所有的非业务对象都已经存在了,比如数据库访问对象,UI对象、数据验证对象、字符串处理对象和权限验证等,这样就可以集中精力去创建、修改业务对象,从而能够很好地维护业务逻辑和数据访问层,应对时时刻刻变化的需求。
CSLA.NET框架把业务对象在各层的撤消能力、失效业务对象的跟踪、“脏”数据的判断、业务对象和业务对象集合的关系、自定义身份验证对象、权限规则对象、数据库写入和读取对象都封装起来,而且为开发人员提供简单调用接口,全面支持Web程序和桌面应用程序的数据绑定。上面提到的这些支持,在.NET里都有解决方案,只不过很零散,CSLA.NET框架运用面向对象设计的思想方法把他们封装起来。
(2)、框架设计
每一个框架本身是一个庞大负责的实体,由很多类组成,而对于开发人员,应该提供给他们尽可能少但又能够满足业务需求的类。CSLA.NET框架做到了这一点,整个框架由七大块组成,包括创建业务对象、数据门户访问、对业务对象在各层间的撤销能力的支持、数据验证支持、分布式事务处理支持、身份验证及授权、工具支持类,但是面向开发人员的只有业务对象中的几个类,开发人员只需要继承这几个类就可以调用框架的所有其他方法。
在上面提到的七大块中,创建业务对象、数据门户访问和分布式事务处理能力是整个框架设计最为关键的部分。
①创建业务对象
业务对象类的设计决定整个框架是否好用,这些类是开发人员最经常使用的类,下图显示了框架中关键的业务对象类:
图7:业务对象最常用的六个类
在开发基于CSLA.NET框架下的分布式应用程序开发时,开发人员就只需要继承这几个业务对象类,便可以调用到CSLA.NET中提供的方法和享受到它的分布式处理能力。
②数据门户访问
数据门户为服务器提供了一个单一的访问和设置入口,负责管理业务对象在服务器上进行数据访问代码的时候与其通信,CSLA.NET框架的数据门户设计是很好的,它提供了一致的访问模式、把客户机和服务器直接的通信方式抽象出来、能够对本地和远程运行的程序进行单点控制。以下是数据门户几个重要的组成部分:
(1)、客户端DataPortal
数据门户继承架构的主要入口,供业务开发代码使用
(2)、客户端代理
客户端通道适配器模式,将下层网络协议从应用层抽象出来
(3)、消息对象
想服务器发送并传回数据
(4)、服务端宿主类
为服务器宿主,包括远程调用、企业服务、Web服务
(5)、服务器DataPortal
实现分布式事务处理技术,与数据存储层打交道
业务对象在客户机与服务器之间有四种操作模式,即查询、创建、修改、删除,都要通过数据门户来执行。

.NET的Windows模拟身份验证,远程网络传输文件

在开发过程中,常常遇到这样的问题:文件,包括图片和文件上传到服务器,而Web服务器和文件服务器不是同一个,而且不在同一个域里面,那么针对于.NET应该如何处理这样的问题呢?
可能很多高手一下子就知道如何解决,但是我确实是经过了一番努力才弄明白,下面就结束如何使用.NET的Windows模拟身份验证。
1、首先引用两个名称空间
using System.Security.Principal;
using System.Runtime.InteropServices;
2、其次定义好模拟权限的调用方法
#region 权限模拟
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);
///
/// 验证用户,并生成WindowsIdentity 实例
///

///
///
///
///
private static WindowsIdentity GetIdentity(String userName, String domain, String password)
{
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) == 0)
return null;
else if (DuplicateToken(token, 2, ref tokenDuplicate) == 0)
return null;
else
return new WindowsIdentity(tokenDuplicate);
}
public WindowsImpersonationContext GetContext()
{
WindowsIdentity identity = null;
WindowsImpersonationContext impersonationContext = null;
identity = string.IsNullOrEmpty(user) ? null : GetIdentity(user, null, pwd);
// 使用用户凭证进行用户模拟
impersonationContext = (identity == null) ? null : identity.Impersonate();
return impersonationContext;
}
#endregion
3、在调用身份模拟的函数中使用
WindowsImpersonationContext impersonationContext = Instance.GetContext("identityValues");
//中间是处理函数
// 取消用户模拟
if (impersonationContext != null)
{
impersonationContext.Undo();
impersonationContext = null;
}

2009年4月22日星期三

谷歌新添个人档案搜索[转自新闻网]

  新华社专电 互联网搜索引擎巨头谷歌公司推出个人档案搜索功能。用户在谷歌网站上可创建自己的档案,而谷歌可以使别人很容易搜索到这个档案。
  谷歌公司软件工程师布赖恩·施托勒在落款21日的谷歌博客中写到:“我们中很多人不时会在谷歌网站上搜索自己的或别人的姓名,这已不是秘密。”
  “当你搜索自己的名字时,为的是知道别人在网上会搜索到什么样关于你的信息,你搜索到的结果可能各种各样,并且可能是你并不想让别人看到的结果,”他写到,“因此,我们想把这件事做得更好,给你更多帮助。”

C#实现代理访问网络资源,源代码实现,WebClient篇

很多公司都使用代理上网,这样当然是有原因的,因为要对公司员工访问网络进行监视,但是这很令开发人员郁闷,因为在程序中访问网络资源是需要自己设置代理认证的,我们公司就是这样的。幸亏不要紧,因为C#提供了针对访问网络资源代理的设置,今天来讲解WebClient代理问题。下面是一个实现的例子:
private static string GetHtml(string url, EncodingType type, bool isByProxy)
{
WebClient webClient = new WebClient();//创建WebClient实例myWebClient
if (isByProxy)
{
//创建代理服务器设置对象的实例
System.Net.WebProxy wp = new System.Net.WebProxy("ISASRV:80");//代理名称很端口,要根据你的情况来设置
//代理服务器需要验证
wp.BypassProxyOnLocal = false;
//用户名密码,要根据你的情况来设置
wp.Credentials = new NetworkCredential("UserName", "PWD", "hold");
//将代理服务器设置对象赋予全局设定
GlobalProxySelection.Select = wp;
//获取或设置用于对向Internet 资源的请求进行身份验证的网络凭据。
webClient.Credentials = CredentialCache.DefaultCredentials;
}
byte[] pagedata = webClient.DownloadData(url);//先获取二进制的资源
}
就是这样,希望能够对你有帮助。

“谷歌街景”拍到外星人?

 据英国媒体25日报道称,“谷歌街景”近日在美国新泽西州拍摄到疑似外星人照片。照片中的“外星人”身形并不很清晰,但与电影中的ET外形相似;它站在灌木丛后,身边有一道奇异的光束。
  这张“外星人”照片拍自新泽西州Morristown机场8英里外的钻石山路,这里距离纽约城30英里。照片一经在网上发布便引起了众多猜疑,有人认为它可能是外太空生物的有力证明,也有人指出这只是一个简单的骗局而已。
  而奇异现象研究组织主管马尔科姆·罗宾逊却形容此照片是“这一类型的首例”。他说:“根据近距离观察,它与外星人很相似,但也很难确定其究竟是什么。让人很感兴趣的是那道奇异的光束,然而我对它也无法做出解释。当时没有任何目击者可以依靠,如果没有更进一步的细节,我认为很难证明它就是外星人。”
  许多网友都相信这张照片上的物体就是外星人,尼克·索哲也是其中之一,他补充说:“不管它是什么,你都无法否认它看上去与外星人十分相似。它的头呈长方形,同样有一个长脖子和肥胖的身体。它的身边有一道光束,你知道,那也许就是一个无法看见的飞碟。然而我也不能确定它究竟是什么,这个地区距离机场不远,同时也曾经有报道称在这个区域发现UFO。”
  2007年5月,谷歌公司在其地图服务上加入了街头实景功能(简称“谷歌街景”),它使用户能便捷的查看各街道马路上清晰的实景图片。用户可以随意360度旋转,放大缩小查看,在十字路口还会显示街道方向与名称。因为有趣而新鲜,街景一经推出便受到用户的热烈追捧。

谷歌地球发现1000年前捕鱼场[转自钦州晚报]

据英国媒体报道,借助“谷歌地球”拍摄的高清卫星图片,英国的考古学家最近在德韦达郡海域发现了一个千前年的巨型渔栅(Fish Trap)。这个巨型渔栅长约250米,呈现出V字形,是科学家们迄今发现的保存最完好的古代人工捕鱼场。
  这一新发现的渔栅呈“V”字型,在海底延绵长约250多米。这种渔栅主要用于守株待兔式捕鱼,而不再另外需要渔船或渔叉。科学家认为,该渔栅应该是世界上已发现的最大渔栅。渔栅位于英国威尔士德韦达郡泰非海域附近,是考古学家们在研究西威尔士海岸航空图片时偶然发现的。该渔栅就好象是一个岩石鱼塘,鱼类会主动随着潮汐的涌动而进入渔栅。在渔栅的尖顶部,那里有一个缺口。渔民用鱼网套住缺口就可以实现自动捕鱼。此外,他们还可以垫高缺口,从而就可以很容易地在浅水池中捞鱼。当然,现在这一渔栅已经无法使用。研究人员认为,数百年来海水的冲积是渔栅沉没于泥沙之中的主要原因。
  英国彭布洛克郡学院海岸环境研究学者齐吉·奥托估计,该渔栅大约建造于1000多年前。奥托认为,“这是一个非常奇异的结构。从航空照片上看,它好象是经过专门设计和定义的。但当你潜入水中近距离观察时,它就好象是一个天然的暗礁。”虽然该渔栅只是近来才在一些航空照片中出现,不过考古学家们早就可以通过“谷歌地球”来研究它。谷歌公司声称,早在2006年12月,他们就已经在卫星和航空图片发现过这一“V”字型结构。大约1000年前,渔栅捕鱼的方式在英国相当普遍,但也存在一定争议。由于它的效率非常高,因此法律曾经禁止使用这种方式在内河捕鱼,只允许在海岸附近使用。
  虽然“谷哥地球”可以帮助科学家们进行考古探测,但目前大多只是用于考古工作的规划阶段,用于确定需要在地面上做进一步调查的地点。尼科·特利普萨维奇博士使用这一软件进行了黑曜岩的采石和贸易研究,黑曜岩是一种火山岩,早在一万年以前,西班牙人以前的人就用这种岩石制造工具、武器和装饰物。但乌尔博士和其他一些人也意识到“谷哥地球”的考古潜能存在消极的一面:掠夺者也可以使用该软件发现可能的目标。乌尔博士说:“我们不能假定寻找考古遗址的所有用户都在做那种对古迹有积极意义的事情。”因此考古学家应该谨慎地公开宣布精确的坐标,乌尔博士表示:“如果是未挖掘的遗址,那么考古学家的任务可能是,在不公布可能会被掠夺者滥用的路线图的情况下,向公众公布关于古代定居点范围的一般想法。”

基于CSLA.NET的分布式架构

(1)、物理N层架构与逻辑N层架构

在软件开发行业,对架构探讨最多的是物理N层架构和逻辑N层架构,一个良好的物理N层架构可以带来高性能、可扩充性、容错能力强和很好的安全性;而一个良好的逻辑N层架构可以带来这些好处:逻辑的组织代码、更易于维护、更好的代码重用、更好的团队开发体验和更高的代码清晰性。

其实,物理架构依赖于逻辑架构,良好的逻辑N层架构都会带来一个好的物理N层架构,因为物理架构重点在于部署,如何部署都取决与应用程序逻辑架构的支持。

(2)、支持逻辑四层架构的CSLA.NET分布式架构

CSLA.NET框架是一个良好的逻辑四层架构,并且能够支持分布式事务处理,还可以很好地支持开发WindowsWebWeb Services清晰的接口。下面是CSLA.NET支持的四层架构的示意图:

3CSLA.NET框架逻辑架构

①表现层:表现层的职责是搜集用户在页面输入的信息,定制用户界面的外观、导航指示和解释用户输入的逻辑,这一层的设计涉及到艺术性的东西,良好优雅的表现层能够吸引用户,特别向Web这样展示在外面的程序。

②业务逻辑层:微软公司对业务逻辑的定义是:一个包含数据验证、登录确认、数据查找、策略方针和算法转换的集合,它定制了企业做业务的方式。业务逻辑层职责在于数据验证、数据操作、数据处理、负责的业务规则和应用程序安全性设置。这一层是最为复杂、也是最令开发人员感到头痛的,业务逻辑会随着需求变化。

CSLA.NET框架对业务逻辑提供异常强大的支持,所以它是一个对开发人员非常友好的分布式架构。

③数据访问层:数据访问独立于业务逻辑,为访问数据库提供统一的调用接口,这样极大地降低了业务逻辑于数据访问的耦合性;CSLA.NET在数据访问层中支持了分布式事务处理能力;

④数据存储和管理层:负责数据在一个持久的数据存储中的物理创建、查询、更新和删除,这一层的功能一般由数据库服务厂商提供。如何对数据库的部署则是构建分布式架构非常重要内容,这取决于数据访问层的分布式事务处理能力。

CSLA.NET在逻辑四层架构的基础上,集成.NET分布式技术支持和作者的设计,非常好地将分布式架构应用到框架中去。

(3)、在分布式架构上对业务逻辑的强大支持

表现层和业务逻辑层之间、业务逻辑和数据访问层之间、数据访问层和数据存储层之间都存在数据验证和数据处理,而为了实现分布式事务处理,这些层中的对象可能会运行在不同的计算机进程中,如何维护他们的统一性,这是是否能够实现分布式架构的关键之一。

为了解决这个问题,CSLA.NET引入了“移动业务对象”这一重要概念,下图是在CSLA.NET中设计的业务对象图:

4:业务对象图

上图4 说明:所谓的移动的业务对象就是指可以在不同的进程或电脑之间移动的对象,它把每一个实体类的属性、字段、方法进行封装。在.NET应用程序中,创建“移动对象”非常方便,就是在类的前面加上[Serializable()],如下面所示:

[Serializable()]

Public class MobileClass

{ }

这是.NET提供的序列化方法。有一点需要注意:不能为移动对象添加太多的数据,否则在网络上面传输将会特别缓慢,最好使用简单的XML数据格式。

CSLA.NET设计了两种方式来传递移动对象,即程序设计中经常谈到的“值传递”和“引用传递”,下面是两种方式的图解:

5:按值传递移动对象 6:按引用传递移动对象

如不需要修改数据,应采用值传递的方式,否则应使用引用传递,引用传递的性能比值传递要差。


Js实现Cookie操作,JavaScript的Cookie操作,源代码

Js实现Cookie操作,JavaScript的Cookie操作,源代码
在JavaScript中如何实现Cookie操作呢,下面给出源代码实现:
function SetCookie(name,value,days)
{
if(days == null) days = 30;
var exp = new Date;
exp.setTime(exp.getTime() + days*24*60*60*1000);
document.cookie = name + "="+ escape(value) +";expires="+ exp.toGMTString() + "; path=/";
}
function GetCookie(name)
{
var arr = document.cookie.match(new RegExp("(^ )"+name+"=([^;]*)(;$)"));
if(arr != null) return unescape(arr[2]); return null;
}

在VS2008中让JQuery智能提示

在VS2008中让JQuery智能提示
JQuery不愧是一个非常优秀的框架,连微软的VS2008都专门为它提供智能提示了,看来势不可挡,我一直认为它将会成为跟.NET一样的优秀框架,只不过.NET真的C#语言,而JQuery真的JavaScript语言。网上有很多关于如何实现智能提示的文章,我本来是想网上找找,然后在我的这里总结发表,可是找了半天发现居然没有合适的,所以就自己写了。
第一步:下载JQuery和相应的提示VS版本(可以到这里来下载:http://csumath.blogspot.com/2009/04/jquery_21.html);
第二步:安装微软对VS2008的一个补丁VS90SP1-KB958502-x86(可以到这里来下载:http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736);
这里注意,如果你的VS2008没有安装sp1,那么还要先安装sp1(可以到这里下载:http://www.microsoft.com/downloads/details.aspx?FamilyID=27673C47-B3B5-4C67-BD99-84E525B5CE61&displaylang=zh-cn)
这样,你就可以轻松地进行JQuery开发了。

2009年4月21日星期二

JQuery下载,最新版本持续更新

JQuery是一个非常酷的JavaScript框架,极大地简化了JavaScript的操作,本人这段时间开始学习它,并且用它,现在把它当成了一个类似.NET框架的开发类库了,每一个项目我都需要引用到这个框架。
这篇日志我提供JQuery下载地址,并且持续更新,希望给各位带来方便:
1、JQuery下载地址(1.3.2版本——最新发布版本)
精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.min.js
完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.js
VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2-vsdoc2.js
2、JQuery下载地址(1.3版本)
精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.min.js
完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.js
VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3-vsdoc.js
3、JQuery下载地址(1.2.6版本——这是现在用得最多的版本)
精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js
打包版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.pack.js
完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.js
VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6-vsdoc.js

HttpContext.Current用法,.ashx文件中使用Session,在非Web项目中使用HttpContext.Current

在类库项目(或者其他非Web项目中)有时候需要HttpContext.Current这个方法,我们发现在类里面添加了引用“using System.Web;”之后还是不行,其实解解这个问题很简单,只需要在该项目的“引用”中添加System.Web这个引用就可以了。
另外值得注意的是,在非Web项目中使用HttpContext.Current.Cache、HttpContext.Current.Session等的时候,最好进行判断HttpContext.Current是否为空:
if (HttpContext.Current != null && HttpContext.Current.Session != null)
{
string test = HttpContext.Current.Session["Session"].ToString();
}
这是因为有些情况下Session或者Cache等会被截断,比如在.ashx文件中,默认情况下就会截断Session。当然也可以通过设置在.ashx文件中使用Session,但是为了安全,最后进行判断。
如果要在.ashx文件中使用Session,那么要先引用“using System.Web.SessionState;”,然后继承接口“IRequiresSessionState”,下面是一个例子:
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.SessionState;
namespace Lemon.Life.WebData
{
///
/// 演示“在.ashx中使用Session”
///

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Xml : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Session["Test"] = "Test";
string test = context.Session["Test"].ToString();
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{ return false;}
}
}
}

设置Session永不过期,Session不过期

很多时候为了需要,必须使用Session,但是Session过期问题一直困扰很多人,我也是。通过网上的搜索,发现了可以通过两种方式了设置,但是只有一个可以永不过期。
保持Session的方法:
(1)、设Session.timeout=-1,或小于0的数。这种方法肯定是不行的,session计算时间以分钟为单位,必须是大于等于1的整数。
(2)、设Session.timeout=99999。这种同样不行,Session有最大时间限制。
其实,Session最大值为24小时,也就是说你最大可以Session.timeout=1440,1441都是不可以有。
所以想通过设Session.timeout的过期时间让Session永不过期是不可能的。写到Cookies里是比较好的方法,但是Cookie非常的危险,如果在外面的电脑很容易被别人劫持,不安全!
那么有没有一种方法可以保持Session呢,可以使用一种办法,就是在要保持session的页里设隐藏iframe
这个Iframe每隔一段时间刷新一次这个Iframe页面就可以了。

js弹出层,效果代码,鼠标移动消失

这两天要做一个JavaScript的弹出层效果,就是鼠标移动上面的时候弹出一个效果层,移开的时候就消失,网上搜索了一下,得到下面的一段实现代码:
1、JavaScript部分
function $(){return document.getElementById?document.getElementById(arguments[0]):eval(arguments[0]);}
var OverH,OverW,ChangeDesc,ChangeH=50,ChangeW=50;
function OpenDiv(_Dw,_Dh,_Desc) {
$("BigBearLoading").innerHTML="";
OverH=_Dh;OverW=_Dw;ChangeDesc=_Desc;
$("BigBearLoading").style.display='';
if(_Dw>_Dh){ChangeH=Math.ceil((_Dh-10)/((_Dw-10)/50))}else if(_Dw<_dh){changew=math.ceil((_dw-10)/((_dh-10)/50))} top="(document.documentElement.clientHeight-10)/2+" left="(document.documentElement.clientWidth-10)/2+" nw="10,Nh=">OverW-ChangeW)ChangeW=2;
if (Nh>OverH-ChangeH)ChangeH=2;
Nw=Nw+ChangeW;Nh=Nh+ChangeH;
if(OverW>NwOverH>Nh) {
if(OverW>Nw) {
$("BigBearLoading").style.width=Nw+"px";
$("BigBearLoading").style.left=(document.documentElement.clientWidth-Nw)/2+"px";
}
if(OverH>Nh) {
$("BigBearLoading").style.height=Nh+"px";
$("BigBearLoading").style.top=(document.documentElement.clientHeight-Nh)/2+"px"
}
window.setTimeout("OpenNow()",10)
}else{
Nw=10;Nh=10;ChangeH=50;ChangeW=50;
$("BigBearLoading").innerHTML=ChangeDesc;
}
}
function CloseDiv()
{
$("BigBearLoading").style.display="none";
}
2、css部分
body {margin:0px}
#BigBearLoading {position:absolute;z-index:10;left:10px;top:10px;border:1px #666666 solid;background:#eeeeee;width:10px;height:10px}
3、div部分
创建一个span,包含下面的内容:
onmouseover="javascript:OpenDiv(500,300,'有时间请经常来看看大熊工作室噢')" onmouseout="javascript:CloseDiv()" 请用鼠标移动到这里
创建一个div,设置为:
id="BigBearLoading" ondblclick="this.style.display='none'" style="DISPLAY: none"

设计模式:原型模式C#实现,源代码

原型模式也属于创建型模式中的一种,面向对象系统中,原型模式在创建一些有固定样子的对象非常有效,这一节主要总结各个网站(csdn、博客园等)对原型模式的探讨,并且给出一个C#实现原型设计模式的代码。
1、原型模式定义
(1)、用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.
(2)、 原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。
2、原型模式的优点
(1)、Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
(2)、我们在设计软件的时候,面临的产品类是动态变化的,这些产品类又具有一定得等级结构,如何封装这种变化,从而使这些容易变化的产品对象不随产品类变化,就需要原型模式了
3、原型模式的UML类图
4、C#代码实现
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Prototype.Design.Pattern
{
class Program
{//运行主程序
static void Main(string[] args)
{
ConcretePotoType1 p1 = new ConcretePotoType1("I");
ConcretePotoType1 c1 = (ConcretePotoType1)p1.Clone();
Console.WriteLine("Cloned:{0}", c1.ID);
ConcretePotoType2 p2 = new ConcretePotoType2("II");
ConcretePotoType2 c2 = (ConcretePotoType2)p2.Clone();
Console.WriteLine("Cloned:{0}", c2.ID);
ColorManager colorm = new ColorManager();
colorm["red"] = new Color(255, 0, 0);
colorm["green"] = new Color(0, 255, 0);
colorm["blue"] = new Color(0, 0, 255);
colorm["angry"] = new Color(255, 54, 0);
colorm["peace"] = new Color(128, 211, 128);
colorm["flame"] = new Color(245, 124, 157);
string colorName = "red";
Color cc1 = (Color)colorm[colorName].Clone();
cc1.Display();
colorName = "flame";
cc1 = (Color)colorm[colorName].Clone();
cc1.Display();
Console.ReadKey();
}
}
//抽象原型
public abstract class PotoType
{
private string id;
public PotoType(string id)
{this.id = id;}
public string ID
{get { return id; }}
abstract public PotoType Clone();
}
//具体实现的原型
public class ConcretePotoType1 : PotoType
{
public ConcretePotoType1(string id) : base(id) { }
public override PotoType Clone()
{
return (PotoType)this.MemberwiseClone();
}
}
//具体实现的原型
public class ConcretePotoType2 : PotoType
{
public ConcretePotoType2(string id) : base(id) { }
public override PotoType Clone()
{
return (PotoType)this.MemberwiseClone();
}
}
#region 扩展性的模式
public abstract class ColorPrototype
{
public abstract ColorPrototype Clone();
}
public class Color : ColorPrototype
{
private int red, green, blue;
public Color(int red, int green, int blue)
{
this.red = red;this.green = green;this.blue = blue;
}
public override ColorPrototype Clone()
{
return (ColorPrototype)this.MemberwiseClone();
}
public void Display()
{
Console.WriteLine("RGB values are: {0},{1},{2}",
red, green, blue);}
}
public class ColorManager
{
Hashtable colors = new Hashtable();
public ColorPrototype this[string name]
{
set { colors.Add(name, value); }
get { return (ColorPrototype)colors[name]; }
}
}
#endregion
}

“谷歌”助失散父女27年后再团聚[转自新华网]

  美国一名男子模仿电影《通缉令》情节,用谷歌搜索引擎搜索自己的名字,竟奇迹般地与失散27年的女儿取得联系。
  分别多年后,父女二人终于在西雅图机场重逢。
  分别多年
  这名男子名为德克·普拉特。27年前,他3岁的女儿弗兰切丝卡随母亲前往厄瓜多尔。不久噩耗传来,岳母告诉他,弗兰切丝卡因蚊子叮咬染病死去。
  实际上,弗兰切丝卡一直随母亲住在当地娘家。她所听说的是,父亲在西雅图死于潜水事故。
  “失去女儿是我一生最痛苦的事。27年来,我备受煎熬,从未释怀,”英国媒体日前引述普拉特的话说。
  女儿失踪前3年,普拉特一直与厄瓜多尔领事馆保持联络,试图找到尸体。每年弗兰切丝卡生日那天,普拉特都对着她的照片度过。
  日前,普拉特突发奇想,模仿电影《通缉令》情节,用谷歌搜索自己的名字,竟搜到了弗兰切丝卡2007年10月发布的信息:“这是给德克·普拉特的留言。我想联系他。我是他女儿。”
  终获重逢
  普拉特惊喜万分,立即留言回复,却没有任何回音。他随即给厄瓜多尔首都基多的一家报纸写信。在热心人帮助下,他终于与弗兰切丝卡取得联系。“我知道那是我女儿,她还活着,她一直在找我”。
  普拉特说:“我惊呆了,第一次和她通电话时我喜不自胜,感觉像在梦里,一个不愿醒来的梦。那太不可思议了,我至今还没完全从我们第一次对话中回过神来。”
  忆及在机场重逢的情景,普拉特说:“我一下子就认出她来。我百感交集,快乐、幸福、恐惧一时间全都涌向我。”
  “起初得知女儿还活着,我感觉自己的使命就是尽一切可能找到她。我会找到女儿,什么都不能阻挡我。”
  他说:“过去20年来,我从未敢幻想像现在这样,在女儿长大后坐在她身边,亲眼看到她有多美丽。”
  爱是一切
  自从母亲家人告诉她父亲还活在世上,弗兰切丝卡就一直在寻找。接受美国媒体采访时,她声泪俱下地说:“我想了解他的情况。我想知道我是不是有个家。”
  “第一次见到他时,我太开心了。那太奇妙了。我想哭,想尖叫。我不知道自己想做什么,”她说,“我心里一直觉得他还活着,……我的感受难以言表。我现在真的很高兴,因为我能告诉他,‘爸爸我爱你’。”
  普拉特说:“我不再像过去那些年那样充满仇恨和愤怒,但我无法原谅的是,27年来,我失去了看着女儿长大的机会,我没有机会做一名父亲想做的事情。”
  不过,在女儿看来,“我知道爸爸爱我,我也爱他。现在这才最重要”。
 

2009年4月20日星期一

谷歌第一季度盈利14亿美元

  谷歌第一季度盈利14亿美元
  谷歌日前发布了截至3月31日的2009财年第一季度财报。报告显示,谷歌第一季度营收为55.1亿美元,同比增长6%,比上一季度下滑3%;扣除同合作伙伴共享的营收14.4亿美元,谷歌第一季度净营收为40.7亿美元;按照美国通用会计准则,谷歌第一季度净利润为14.2亿美元,上一季度为3.82亿美元。
  谷歌第一季度运营支出为15.2亿美元,在营收中所占比例为28%。谷歌上一季度运营支出为16.5亿美元,在营收中所占比例为29%。谷歌第一季度运营支出中计入了7.74亿美元的员工薪酬相关和设备支出,谷歌上一季度运营支出中计入了8.90亿美元的员工薪酬相关和设备支出。
  通用汽车CEO表示 公司破产几率增大
  据报道,通用汽车CEO韩德胜(Fritz Henderson)当地时间周五上午称,该公司正在与美国财政部官员合作修改其重组计划,试图避开破产的命运。
  韩德胜表示,通用汽车仍有可能在法庭之外进行重组;但他同时警告称,该公司在必要时候申请破产保护的几率进一步加大。
  韩德胜称,虽然已经从联邦政府那里接受了134亿美元的援助资金,但该公司本季度很可能仍旧需要46亿美元的扶持资金,不过他并未透露何时需要这笔资金。今年2月份,通用汽车曾表示,该公司最多还需要166亿美元的贷款,其中本季度需要46亿美元。  
  花旗扭亏为盈 净赚16亿美金
  花旗集团近日发布了第一季度财报,报告显示,受益于交易利润和会计准则,花旗集团第一季度重新实现盈利,结束了此前连续五个季度的亏损趋势。
  在这一季度中,不计入发放优先股股息所带来的相关支出等一次性成本,花旗集团盈利16亿美元,好于去年同期的亏损51.1亿美元。计入一次性成本,花旗集团第一季度净亏损9.66亿美元,每股亏损18美分,这一业绩好于去年同期。2008年第一季度,花旗集团净亏损51.9亿美元,每股亏损1.03美元。
  此前调查显示,根据接受调查的分析师平均预期,花旗集团第一季度每股亏损将为32美分。
  花旗集团第一季度固定收益部门的交易收入为46.9亿美元,好于去年同期70.2亿美元的交易亏损;股票交易部门营收为19亿美元,同比增长94%。

2009年4月19日星期日

面向对象必知:继承本质论

面向对象必知:继承本质论
每个人开始学习面向对象的时候,基本上都感觉自己很能理解什么是“继承”,可是我相信没有多少个人是真正地理解了“继承的本质”。
继承,就是面向对象中的类与类直接的关系,继承的类叫做子类或者派生类,而被继承的泪叫做父类、基类或者超类。通过继承,子类可以拥有父类的属性、方法,同时子类也可以添加新的属性或者方法,还可以修改父类的方法和属性等。
在《你必须知道的.NET》中,作者列举了下面几个关于继承的要点:
1、继承是可以传递的,子类是对父类的扩展,必须继承父类方法,同时可以添加新方法;
2、子类可以调用父类的方法、属性和字段,但是父类不能够调用子类的方法、属性和字段;
3、虚方法如何实现覆写操作,使得父类指针可以指向子类对象成员;
4、子类不仅继承了父类公共成员,也继承了私有成员,只是在子类中不被访问;
5、new在虚方法继承中起阻断作用。
上面这五条几乎可以说是继承的本质,深刻理解了这些,基本可以说对继承掌握了,不过还有一个比较重要的地方需要注意,请看:
#region 深入理解继承机制、多态、封装
public abstract class Animal
{
public abstract void ShowType();
public void Eat()
{
Console.WriteLine("All Animals need eating!");
}
}
public class Bird : Animal
{
private string type = "Bird";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
private string color;
public string Color
{
get { return this.color; }
set { this.color = value; }
}
}
public class Chicken : Bird
{
private string type = "Chicken";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
public void ShowColor()
{
Console.WriteLine("Color is {0}", Color);
}
}
#endregion
上面是定义了一个抽象父类和两个子类,下面是调用方法:
#region 深入理解OO思想
//Bird bird 创建的是一个Bird类型的引用,而new Bird()完成的是创建Bird对象,分配内存空间和初始化操作
Bird bird = new Bird();
Chicken chicken = new Chicken();
Bird bird2 = new Chicken();//请注意上面这里的区别
bird.ShowType();
chicken.ShowType();
bird2.ShowType();
#endregion
如果你能够了解为什么上面得到的结果,你就深刻理解了什么是继承了

.NET框架学习系列之一:什么是.NET框架?

1、.NET框架的定义
按照微软官方的说法:.NET框架是支持生成并且运行下一代应用程序和 XML Web Services 的内部 Windows 组件。也就是说,.NET框架是windows的一部分,只要是运行在windows操作系统下的程序都可以得到.NET框架的支持。其实微软的下一代windows平台(Vista和windows 7都支持.NET框架)。
2、.NET框架要实现的梦想
.NET框架是为了实现下列目标:
(1)、提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。
(2)、提供一个将软件部署和版本控制冲突最小化的代码执行环境。
(3)、提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。
(4)、提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。
(5)、 使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。
(6)、按照工业标准生成所有通信,以确保基于 .NET框架的代码可与任何其他代码集成。
3、.NET框架的组成部分
.NET框架具有两个主要组件:公共语言运行库 .NET框架类库
对于一个刚刚学习.NET(无论是VB还是C#),接触的就是.NET框架类库,对于公共语言运行库只需要一般了解即可。
(1)、公共语言运行库是 .NET框架的基础。
您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。
(2)、.NET框架类库
.NET 框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web Services)。

2009年4月18日星期六

我也来谈谈中国的SNS发展

我是做互联网的,也可以说是个做链接的。平时对互联网上刚刚出来的新网站都会去看看,也可以说是去玩玩。如果有人问去年中国互联网最火的是什么,我的回答是SNS(社会化网络社交网站),无论是最开始的开心网(注意:这里直kaixin001),到校内网,然后到51的sns,qq的sns,还有成千上万个国内无名的sns,太多太多了。
最开始我很看好开心网,其次是51和校内,qq的sns其实最多也就是依靠qq用户群,我相信人们信任的还是靠sns起来的网站(包括技术上的和习惯上的)。不过很可惜开心网的kaixin的顶级域名被陈一舟买到了,这可以说是开心网的一大败笔!不可否认,开心网从一开始就踏踏实实地做产品、做技术(听说他们的老大拿的也是不到一万块的工资,在北京西四环上奋斗着),可是居然没有能把域名拿到,弄得现在很多想注册开心网的,其实也跑到了校内网去了(校内网和kaixin.com同属于陈一舟)。
现在看来,未来sns老大非校内网莫属了,下来就是51、qq、开心这些二线的了,再下来就是无名的sns网站了。

关于CSLA.NET分布式框架的论文之选题背景和意义

(1)、选题背景
计算机和互联网技术迅猛发展, 而硬件水平远远不能够满足需求,人们越来越依赖于分布式系统,因为分布式系统可以将很小的资源进行汇聚,运用软件设计来解决硬件发展的瓶颈。
我在公司实习的时候,公司的网站在整合时就遇到了技术上的问题,即无法将几个子系统很好的融合起来,因为原来大量的子系统独立地分布在不同的服务器上,现在要统一起来非常困难。要解决目前的问题,可以选择购买高性能服务器,可这样做代价是昂贵的,而且没有可扩充性。公司的高层也马上想到了通过分布式架构来解决这个问题。我结合自己的情况和公司的资源,将研究分布式架构作为实习的一个任务,也当作毕业设计和入职前的锻炼。
不仅仅是网站,在未来的计算机软件领域,对分布式的研究和应用会变得越来越普遍,特别是当硬件的发展面临无法跨越的瓶颈时(目前CPU的频率已经接近极限),人们将会愿意花更多地的人力和物力到分布式系统研究中去。
(2)、课题意义
分布式应用程序是分布式系统一个非常重要的部分,无论是企业软件的开发,还是互联网开发,都大量地运用分布式应用程序,企业内部的大型系统都靠分布式架构支持,国内外许多大型网站也都是基于分布式架构下开发的,比如百度、Google、MSN、亚马逊网站等。
Microsoft公司的.NET平台提供了方便的分布式应用开发技术,包括.NET Remoting、企业服务和Web Services,而CSLA.NET是一个基于.NET平台下开发分布式应用程序的开源框架,它是微软地区总监、微软最有价值专家Rockford Lhotka开发的,该架构大量地运用.NET技术、面向对象思想、以及分布式架构。
下图显示了基于CSLA.NET框架的应用程序基本框架:

图1:基于CSLA.NET框架的应用程序基本架构
CSLA.NET本身是一个非常优雅的开发分布式应用程序的架构,它把在分布式开发过程中需要运用到的底层技术封装到业务对象中,这样要实现分布式架构只需要对业务对象进行调用,那么开发人员就可以集中解决复杂的业务逻辑。目前,已经有许多企业运用CSLA.NET来开发分布式应用程序,从现在的发展趋势看,CSLA.NET在基于.NET框架下的分布式应用开发中将会非常有前途。

一篇关于CSLA.NET分布式框架的论文摘要

摘要
本文主要研究CSLA.NET分布式框架和分析如何开发基于这个框架的分布式系统。首先,通过查阅文献,总结得到基于分布式架构的程序必须满足:程序至少有一部分能够运行在另外一台远程计算机的进程中;并分析出:CSLA.NET框架被设计成一个逻辑四层的分布式架构,它引入了“业务对象”(见图3说明)来维护运行在不同进程或电脑上的程序的一致性。然后,通过阅读CSLA.NET框架的说明文档和分析其源码结构,发掘出了CSLA.NET开源框架分布式架构的特点,整个架构分为三大部分:⑴业务逻辑类库,主要设计了最重要的业务逻辑方法;⑵数据访问门户类库,运用通道适配器模式和消息路由模式,实现了客户端访问服务器只有一个单一的访问和设置入口,从而实现对分布式事务处理的支持;⑶支持类库,主要运用面向对象方法把.NET提供的零散技术封装起来,方便开发人员使用。最后,在CSLA.NET开源框架支持下,结合我在方正阿帕比公司实习的工作,开发了一个小型的分布式应用程序——方正阿帕比项目管理系统,该系统充分利用CSLA.NET框架提供的功能,并大量运用了设计模式、软件工程、UML建模、数据库设计、面向对象设计等知识。

关键字:CSLA.NET框架、分布式架构、分布式应用程序、业务对象、数据访问门户

委托用法,C#源代码

1、委托的概念
委托是C#一个非常重要的概念,也是很有用的,因为委托和事件结合起来使用可以完成很多功能(委托是事件的基础),而且可以通过委托来实现函数的匿名方法(通过将委托与命名方法或匿名方法关联,可以实例化委托)。
C#的委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
2、委托的用法
委托类型声明的格式如下:
public delegate void TestDelegate(string message);delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。
为了与命名方法一起使用,委托必须用具有可接受签名的方法进行实例化。有关方法签名中允许的方差度的更多信息,请参见委托中的协变和逆变。为了与匿名方法一起使用,委托和与之关联的代码必须一起声明。
3、实现代码
下面用C#代码来说明如何使用委托(参考自微软msdn):
using System;
// Declare delegate -- defines required signature:
delegate void SampleDelegate(string message);
class MainClass
{
// Regular method that matches signature:
static void SampleDelegateMethod(string message)
{
Console.WriteLine(message);
}
static void Main()
{
// Instantiate delegate with named method:
SampleDelegate d1 = SampleDelegateMethod;
// Instantiate delegate with anonymous method:
SampleDelegate d2 = delegate(string message)
{
Console.WriteLine(message);
};
// Invoke delegate d1:
d1("Hello");
// Invoke delegate d2:
d2(" World");
}
}

分布式架构简介,本科毕业论文

在软件开放领域,当软件工程被纳入软件开发的组成部分后,人们就开始关注软件体系架构。软件架构经历了几个发展阶段:客户端/服务器架构(简称CS架构)、传统B/S架构和基于分布式的架构。
(1)、客户端/服务器架构
客户端/服务器架构(简称CS架构)是人们曾经运用最多的,并且一直是软件开发领域的主流应用程序结构。在C/S架构下每个客户端运行单独的应用程序实例,因而不能够适应简单的客户端交互;而且当客户端达到成百上千用户同时使用的时候,服务器的数据库立即成为瓶颈,这是非常可怕的,顷刻之间就可以使服务器崩溃。就算现在系统运行非常良好,可是当需求扩大时这样的架构就要全部重新设计和部署。而随着人们对计算机软件需求的不断提高以及面对越来越复杂的业务逻辑,加上地域的限制,传统的CS架构逐渐暴露出来问题,比如性能下降、无法扩充等。
(2)、传统B/S架构
传统B/S架构中的Web服务器既要负责执行服务器端脚本来完成日趋复杂的网络管理逻辑,又要为浏览器请求内容的需求服务,负载不断加重,已经逐渐成为阻碍系统高效运行的瓶颈。同时,传统的B/S架构在编程逻辑、软件质量、功能实现、执行速度、系统安全、开发效率等诸方面也日益表现出明显的局限性。这些都是传统B/S架构不能解决的问题。
(3)、基于分布式的架构
分布式架构为客户端/服务器架构面临挑战的扩张性问题提供了解决方案,同时也解决了B/S架构面临的性能问题。基于分布式架构下的应用程序独特之处在于:程序的每一个部分能够运行在另外一台远程计算机的进程中,它把软件模块化成一组跨越不同计算机进行通信的对象,提供诱人的可扩充性。下面是分布式架构的模式:

图2:分布式架构调用进程
图2中的服务器进程还可以根据需求不断增加,这样就可以把不同任务分别加在不同的组件中,并且把这些组件部署到不同的服务器上。这样,大型系统的子程序就可以部署在多台服务器上面,当需要增强服务器能力的时,只需要添加新的服务器,可扩充性得到了很大的提高;并且,如果一台服务器出现了问题,不会影响到其他服务器的工作,可靠性也得到了保证。
最后需要指出的是,也要慎重使用分布式架构,虽然分布式架构在解决复杂问题都时有很大的优势,但是分布式架构下的应用程序的开发及部署也是复杂的。
许多开发工具提供商和个人为分布式应用程序提供了许多良好的框架,比如微软的.NET技术提供了.NET远程调用、XML Web服务和企业服务COM+技术,下一节将要讨论的CSLA.NET就是在.NET支撑下抽象出来的一个开发分布式应用程序的框架。

2009年4月16日星期四

.NET程序员重点学习和积累的技术要点

我知道,一个人的生命是有限的,而工作时间更加有限(我的价值观是工作和事业是为了让生活更好)。基于此,我现在只能在有限的时间里做有限的事情,下面是自己对自己的规划:
一、职业规划
首先,踏踏实实做一个技术人员,在工作总学习和提高自己;然后,能够凭借自己的能力做到项目开发经理;最后,要么能够在企业里做管理层,要么回学校讲课,无论如何最好能够出一本技术书籍。
二、深入学习的技术
1、最重要的:C#和ASP.NET技术,JQuery技术,设计模式,面向对象技术,css和页面布局技术,网站架构技术(squid,memcached等),SQL Sever数据库技术;
2、其次的:PHP技术,Linux技术、MySQL技术;
3、最为基础和技术提高的:C语言技术,数据结构,算法技术,计算机技术(cpu,内存,IO等和程序设计相关的技术)。 三、最值得我去深入研究的技术
以下这些技术是我必须要去深入研究的,而且要花功夫研究:
1、C#语言、.NET框架、C语言;
2、数据结构、面向对象、设计模式、软件工程;
3、Memcached、JQuery(相当于JavaScript)、css。

2009年4月15日星期三

搜索引擎的工作方式

l 、 三个影响搜索引擎收录的因素 主要是:SE算法、外部链接和网站内容;






2、搜索引擎简单的工作流程

网站优化SEO操作要点

SEO(search engine optimization)的中文意思就是搜索引擎优化。
首先,SEO没有技术含量,一般的SEO工作不像一门技术,更像一个规范,如果网站内容能按照这个规范来进行,那么搜索引擎就能看的见你的网站,也会喜欢你的网站。
其次,SEO工作需要广泛的知识,还需要持续,细心,耐心,反复的操作。也许网页中一个词汇的改变就能达到很好的SEO效果,带来大量的流量;也许几个词汇没有注意就导致网站被降权甚至删除。
最后,做网站和SEO比较早的人都有个口号叫:内容为王。意思是SEO只是一个辅助,是帮助你把好的东西推广出去,如果网站本身没有内容,或者内容不好,自然无法达到理想的效果。

设计模式:抽象工厂模式C#实现,源代码

前一篇文章介绍了简单工厂和工厂方法模式,这次讨论抽象工厂模式。
1、抽象工厂模式定义
抽象工厂模式也叫Abstract Factory模式,是由GoF提出的23种设计模式中的一种,也是对象创建型模式之一。它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它提供一个接口,以创建多个相关联的对象,而无需具体指定其具体的类。形象地说,它是一个工厂,能够生产众多产品。当用户需要某种产品的时候,不需要去关心这个产品的具体实现,而只需要指定产品的名称,抽象工厂就能够按你的要求进行生产。这里所指的产品,在C#中我们代表的是一个实例的类。
2、在什么情况下使用抽象工厂模式
在面向对象的程序设计中,我们经常会定义许多类,并通过new对其进行实例化。一旦类对象较多,且在实例化的时候,要做的初始化工作比较复杂的时候,我们就可以通过抽象工厂来管理。根据对象的性质和内容分别抽象成类,同时定义接口和接口方法。一旦定义了抽象工厂,实例类的工作就交给工厂,使用者只需要告诉工厂,你实例化的对象是什么就行了。
3、抽象工厂模式实现原理
抽象工厂模式(Abstract Factory)强调的是对象组合机制,由在父工厂内定义不同的“子工厂”对象来负责不同的目标对象的创建。请注意下面要点:
(1)、 抽象工厂模式中,产品(目标对象)的使用者可能需要使用具体的子工厂来生成该产品;
(2)、抽象工厂模式采用传参数的形式直接在父工厂内决定该产品对象应该由哪一个子工厂生产。即Abstract Factory模式中,跟客户打交道的只有抽象工厂与抽象产品,客户不需要知道产品由哪个工厂生产,也不需要知道被生产的是哪一种具体的产品;
(3)、Factory Method模式中,省城的对象产品只限定于某一类产品;Abstract Factory模式则可以提供多个生产接口生成多类产品;
(4) 、Abstract Factory模式Factory Method模式的更高层次的抽象,也更最具一般性。可以把Factory Method模式看作是Abstract Factory模式的一种特殊情况。
4、C#实现代码
using System;
using System.Collections.Generic;
using System.Text;
namespace AbstractFactory.Design.Pattern
{
class Program
{
static void Main(string[] args)
{
IAbstratFactory factory1 = new ConcreteFactory1();
IAbstratFactory factory2 = new ConcreteFactory2();
Evironment e1 = new Evironment(factory1);
Evironment e2 = new Evironment(factory2);
e1.Show();
e2.Show();
e1.Run();
e2.Run();
Console.ReadKey();
}
}
//抽象产品
public interface IAbstractProduceA
{
void MakeProduce();
}
public interface IAbstractProduceB
{
void InterTract(IAbstractProduceA a);
}
//具体产品
public class ProduceA1:IAbstractProduceA
{
public void MakeProduce()
{
Console.WriteLine("ProduceA1 is Created now!");
}
}
public class ProduceB1 : IAbstractProduceB
{
public void InterTract(IAbstractProduceA a)
{
Console.WriteLine(this + " contact with " + a);
}
}
public class ProduceA2 : IAbstractProduceA
{
public void MakeProduce()
{
Console.WriteLine("ProduceA2 is Created now!");
}
}
public class ProduceB2 : IAbstractProduceB
{
public void InterTract(IAbstractProduceA a)
{
Console.WriteLine(this+" contact with "+a);
}
}
//抽象工厂
public interface IAbstratFactory
{
IAbstractProduceA CreateProduceA();
IAbstractProduceB CreateProduceB();
}
//具体工厂
public class ConcreteFactory1 : IAbstratFactory
{
public IAbstractProduceA CreateProduceA()
{
return new ProduceA1();
}
public IAbstractProduceB CreateProduceB()
{
return new ProduceB1();
}
}
public class ConcreteFactory2 : IAbstratFactory
{
public IAbstractProduceA CreateProduceA()
{
return new ProduceA2();
}
public IAbstractProduceB CreateProduceB()
{
return new ProduceB2();
}
}
//客户端
public class Evironment
{
private IAbstractProduceA abstractProdueA;
private IAbstractProduceB abstractProdueB;
public Evironment(IAbstratFactory factory)
{
abstractProdueA = factory.CreateProduceA();
abstractProdueB = factory.CreateProduceB();
}
public void Show()
{
abstractProdueA.MakeProduce();
}
public void Run()
{
abstractProdueB.InterTract(abstractProdueA);
}
}

Google公司发展给予我们的启示

我们不能否认Google公司是发展最为快速的互联网公司,Google给予人的总是年轻、有活力、充满想象和创造力,那么这样一个公司是如何成长壮大,以至于成为超越其他任何互联网公司的大企业呢?
第一、坚持理想,别净想发财
事实上,佩吉与布尔当初根本不想开公司。根据新经济杂志Business 2.0报导,当初两人研发出搜寻技术后本想以100万美元卖给雅虎,但雅虎嫌太贵而未成交,二人无奈只好自己出来开公司。不曾料,Google后来飞黄腾达到至此,令雅虎捶胸顿足、后悔不已。
第二、拿出顾客真正想要的产品
一般门户网站的首页往往五彩缤纷,除了新闻、搜索、天气预报等内容,还充斥各种横幅广告(banner)、弹出式广告(popup),把网民搞得心烦意乱。
Google却反其道而行。它的首页虽然干净简单到近乎单调,强大的搜寻功能依然吸引超人气,也让众多厂商争相在搜寻结果页面右方,刊登简单的文字广告。因为,比起其他不负责猛推的网络广告,Google的搜寻结果页面才是最能打动目标消费者的所在。
第三、让你的员工快乐
一定有很多人羡慕Google的员工:他们能自己安排上班时间,T恤与牛仔裤是Google内最常见的上班衣着。据称,Google的工程师通常在中午才到办公室,在公司的自助餐厅享用知名厨师所烹调的午餐与晚餐,一直工作到深夜。高层主管也跟员工一样,每天在公司的自助餐厅用餐。

谷歌能否“扛起”正版音乐大旗[转自《中国新闻出版报》]

  随着人们生活水平的提高,娱乐越来越多元化,从人手一部walkman,排队购买磁带的唱片业黄金年代到今天的版权模糊,互联网音乐免费下载,唱片业的兴衰史似乎有必要和互联网的发展史捆绑起来看。
  有人士评论,唱片行业的衰退,互联网确实起到了催化剂作用,但与其讨论互联网、音乐版权模糊给行业带来多大伤害,倒不如认清正版自身存在的一些弊病。正如巨鲸音乐网(下称“巨鲸”)方面所说,正版意味着昂贵,意味着不方便,还要加密。为了保护正版所采取的收费措施,意味着要为1元钱的歌曲用10个步骤来完成。
  谷歌的最后一块拼图
  不久前,谷歌中国区总裁李开复高调宣布与巨鲸联合推出谷歌音乐搜索板块。“我们很早就知道MP3音乐搜索是我们产品里面的缺口,且是唯一的缺口。我们当然可以很快推出一个在法律上比较模糊的产品来堵住这个缺口。但我们容忍这个缺口存在了很长时间,我们不能因为市场份额就妥协我们的价值观。”至此,谷歌的中国搜索版图填上了之前缺失的最重要的一块拼图。
  据了解,谷歌推出免费音乐搜索、下载服务均为巨鲸音乐网提供的正版音乐。初期35万首,全部曲库达110万首。唱片业纷纷表示,谷歌此举与其自身以及唱片公司等音乐版权方,是一种创新性的长期双赢模式。
  实际上,在谷歌推出音乐板块前,做正版数字音乐的网站并不缺乏。李开复认为,从根本上说,谷歌音乐是完全免费的,这跟过去正版、盗版不一样,正版音乐实施免费后,与盗版相比也就不存在壁垒。李开复同时强调,“与盗版音乐相比,谷歌音乐的质量是我们的一个优势,甚至可以用家里最好的功放来播放。里面不掺杂广告,也不会出现音量不协调、病毒,或词曲不一致的情况。”
  “其次,就是谷歌音乐的个性化归类,比如对乐曲本身进行分析、处理,在特定的环境下听一些歌曲,一个搜索引擎如果用盗版来做这种分析的话,在法律方面是有责任的。比如说失恋了想听哪些歌,或者和高中生开一个聚会想听哪些歌曲,慢慢可以用音乐的语言来搜这些歌,这是盗版者非常难做到的。所以,最终仅仅靠功能也可以留住很多用户,所以我们并不担心。”李开复说。
  在使用过程中,记者发现,利用百度等网站搜索“张学友”,找到了近10万多个音乐链接,而谷歌音乐提供的音乐链接连前者的零头都不够。
  对于这种差别李开复表示,“音乐搜索结果并不是多多益善,搜索的目的不是给用户最多无关的结果,或者是盗版、低质量的结果。搜索的目的其实就是给用户一个他需要的结果。如果它是精确的,就是越少越好。”
  有业内人士分析,此次谷歌与巨鲸及几大唱片公司之间的联姻,其媒人实际上是百度。百度MP3搜索给百度带来多少用户无从知晓,但立下赫赫战功的MP3搜索很多都是版权模糊的,也因此遭到了众多唱片公司的诉讼。
  国际唱片业协会中国区首席代表郭彪就对记者明确表示,对于盗版,音乐国际唱片协会是坚决打击到底,支持任何企业正版的商业行为。“去年春节以后我们又把百度告了,现在这个事情还没有结论,这跟谷歌推出正版有一定联系,但联系并不大。谷歌音乐的推出不会左右我们打击盗版的态度,但是推出来了我觉得是好事,因为它是一种新的商业模式,毕竟打完了还得有新的模式,提供良好的音乐服务,这是值得推荐的。所以说态度就是全力支持。”郭彪说。
  郭彪同时强调,实际上作为原告也并不轻松,因为投资方无法收回成本,损失非常大,所以即便现在打版权官司是一件费力赚吆喝的事也必须坚持下去,因为只有正版化才能帮助唱片业走出困境。
  互联网时代唱片业的生存模式
  对于巨鲸同全球四大唱片公司华纳、环球、百代、索尼,以及140多家独立唱片公司、国际四大词曲出版商和中国音乐著作权协会签署了授权协议,再与谷歌进行合作。郭彪认为:“我们支持的是这个事情,不是单单支持某个网站,谁做正版我们就支持谁,相反不管谁做了盗版,我们都会反对。这是我们明确的态度。”
  巨鲸方面表示:“长期以来,我们特别希望能够把好音乐随时呈现,我们库里面有很多歌曲都是从唱片公司获得首选的,但是如何把它推到用户面前,让用户容易、简单、方便地获取,的的确确是需要技术的进步。所以,从用户来讲,我们觉得其实过去10年互联网音乐的发展,下载视听等发展很快,对于用户从技术角度来讲,是没有太多创新的。当然,这里面有IT行业和唱片行业之间一直在探索的互相合作的关系。从现在开始,它就会很有机地把技术的进步、用户的体验都发挥出来。”
  按照以往的经验,想从互联网上对用户收费并不是件容易的事,谷歌通过这种方式既让企业的本土化更进一步,大众又可以得到免费的高质量音乐服务,而唱片公司也在互联网时代找到了一种新的商业模式,谷歌会通过广告分成等方式给版权方带来相应的收入,可以说具有一定的示范性。
  有媒体报道,4月10日美通社亚洲曾发表过一篇名为《数字音乐能为谷歌在中国搜索市场唱响凯歌吗?》的报告。文中分析指出,谷歌中国新推出的音乐服务,未必能大幅提高谷歌作为中文搜索引擎的市场份额。报告评估了谷歌的音乐服务对中文搜索市场以及中国在线音乐市场的影响。此前谷歌一直未能成为中国搜索市场的领先者,而各唱片公司尚未能在中国的在线数字音乐下载市场上获利。该报告的结论是,谷歌试图通过创新的媒体服务提高用户流量,并增加收入。新推出的音乐服务正是朝着这个正确方向迈出的积极一步。然而,这不足以使谷歌在市场上扭转乾坤,此项举措对其竞争对手百度构成的威胁微乎其微。
  综合网上相关信息,记者发现这种免费的形式目前只能说是唱片业与互联网公司走出的探索性的一步,谷歌的新举措只是提供了一个积极的试验新商业模式的机遇,而具体能不能成为一种成功的商业模式还很难说,即便是谷歌的李开复也没有十足把握。“对于我们来说,最重要的是先找到用户。如果我们只能拿到1%的市场份额,绝对没有任何商业模式。但如果有60%或70%的市场份额,绝对有商业模式。”李开复强调。
  此次谷歌之所以能够引来巨鲸以及几大唱片公司的实际行动支持,郭彪认为,因为唱片公司包装艺人,购买好的词、曲做宣传,以及公司运作的费用是一笔极大的开销。但由于盗版横行整个行业,导致成本无法回收,唱片公司急需找到一个突破口来解决费用问题,而这正是与谷歌合作的原动力。
  通过协议来看,大众可从谷歌直接搜索到巨鲸提供的音乐,巨鲸最后会按照合同的比例把钱分到唱片公司。但是大众照样使用免费的。但这个办法对于是否足以维持唱片业的生存,恐怕它还要观察一段时间,因为刚开始合作,一切都处于探索阶段。
  谈到谷歌巨鲸模式能否彻底解决中国正版音乐之路的弊病时,郭彪表示:“我觉得不一定,现在还只是个方向,但是它应该有一个光明的前景。”
  对于未来,郭彪认为,将来3G普及,还有手机音乐,形式会很多,关键是要把握住一条线,版权保护是和科技发展密切相关的。当一种新的载体出现并成为主流的时候,版权保护的问题就来了,前者就被慢慢淡化了。所以说,核心问题在于怎么来应对新情况。目前来看,谷歌之道是一个很好的发展方向,但还不能说彻底解决。盗版问题会在多种产品上体现,首先不能代替3G,3G将来普及以后,手机打开就能听音乐,年轻人是不是还愿意回到互联网去,无法预测。另外也不能代替一些音乐发烧友,用户花很多钱买一个高级音响,目前来看还得买CD等产品,而且也不能解决“粉丝”的某些需求。再如,现在日本CD销售市场仍占70%,因为老龄化,老年人还是喜欢比较传统的东西。谁能保证这部分的正版与否呢?
  “如果有一天说互联网问题解决了,那么将来3G时代带来的问题也能够解决,那时中国唱片行业的春天也就到了。”郭彪说。

拿什么来拯救你,google博客?

昨天打开Google博客,看到了这句提醒“预设停运时间2:00AM PDT on Thursday (4/16)”,无语啊!!!希望这次不是被封掉!
拿什么来拯救你,google博客?在china这样的环境里。

把sql sever 2005转换为sql server 2000,sql server 2000 转换为sql sever 2005

微软的产品都具有非常好的兼容性,这也是比尔.盖茨的高明之处!想必世界上很少有人能够做到这样的效果,这里要讨论的是微软的数据库工具sql sever 2005和sql sever 2000之间的相互转换。不可否认,sql sever 2005拥有非常好的性能,可是有时候我们开发的产品应该具有兼容性,毕竟并不是所有的企业都用得起sql sever 2005,特别是小企业。
sql sever 2000转换为sql sever 2005是非常简单的,而且几乎不会有任何的错误,方法很简单:直接把sql sever 2000的数据库进行完全备份,然后打开 打开SQL Server 2005 的manger studio,还原数据库即可。不过 SQL Server 2005专为SQL Server 2000并不是很简单,而且不能直接转换,下面是一些常用的方法:
一、通过微软的数据库复制功能
先在SQL Server 2000里建立一个和SQL Server 2005 一模一样的数据库,然后在SQL Server 2005和SQL Server 2000之间设置复制。不过这样会出现一些错误,幸好不会有很大的问题,可以忽略一些错误。
二、“山寨”版的转换方法
操作步骤如下:
1. 在SQL Server 2005 里生成SQL Server 2000版本的数据库脚本
在"脚本向导"的"选择数据库"中, 确定选择的是要转到2000的库,在接下来的"选择脚本选项"中, 找到"为服务器版本编写脚本"项, 选择"SQL Server 2000"(注意:SQL Server 2005 里面有这个选项),依照步骤生成相应的SQL Server 2000的脚本,保存起来。
2. 在SQL Server 2000中创建目标数据库
在SQL Server 2000,执行上面生成的脚本.以创建一个新的数据库
3. 将数据从2005导到2000
在"SQL Server 导入和导出向导"的"选择数据源"步骤中, 确定选择的是要导出的数据库,在"选择目标"步骤中, 连接到 2000, 并选择步骤2新建的库。这里需要特别注意,因为我为了找到“如何连接到SQL Server 2000”花了很大的功夫,其实很简单:
相信你一定安装了两个版本的SQL Server(即使你的SQL Server版本在不同的服务器也不要紧),SQL Server 2005的(local)默认是链接到SQL Server 2005自身的库,所以需要在“选择目标”的“服务器名称”输入SQL Server 2000的数据库服务名称(这个名称只要打开SQL Server 2000的企业管理器里可以查看到)。

巧用在博客和论坛发布信息提高网站优化质量

1、如何发布信息,要发布什么样的信息?
你可以在你的网站上选择一些自己原创的内容到选定的博客或论坛上发布。你可以直接以你的网站关键词作为标题。然后把原创内容放上去,在内容里面出现你的关键词时,你可以对关键词进行加粗或斜体,然后给它选择一个不同于其它文字的颜色,再做一个超级链接,链接到你的首页或文章页面。这样搜索引擎就会认为这个关键词跟你的网站存在某种相关性,可以提高你的网站在搜索引擎里关于这个关键字的排名!最后在文章的结尾,你还可以将原创的文章地址放上去。比如本文来自:+你的原创文章地址,转载请注明出处!这样搜索引擎就会知道你的网站才是原创!大家应该也知道原创的重要性了吧,我就不多说了!
2、应该在哪里发布信息?
首先你可以选择一些权重比较高,流量比较大的博客或论坛,比如新浪博客、网易博客、搜弧博客等;或者选择与你行业相关的网站博客或论坛来发布信息,比如说你是做工控行业类的网站,你可以在百度里在搜索一下电子版之家,选择排名前十且有提供创建博客功能的网站来发布。到百度或者google里在搜索结果的第一网站中国工控网就有提供博客和论坛的信息发布。选择在这样的网站发布信息,可能几个小时就能被搜索引擎抓取,而且行业相关性大,对提供自己的网站权重也是非常有帮助的!

2009年4月14日星期二

C#常用函数列表(二)

11、string str=Request.QueryString["变量"];
用超链接传送变量。如在任一页中建超链接href="Edit.aspx?fbid="23"点击.在Edit.aspx页中取值:String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点
13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下
14、 父节点.RemoveChild(节点);
删除节点
15、Response
Response.Write("字串");Response.Write(变量);向页面输出。Response.Redirect("URL地址");
跳转到URL指定的页面
16、char.IsWhiteSpce(字串变量,位数)--逻辑型
查指定位置是否空字符;如:string str="中国人"Response.Write(char.IsWhiteSpace(str,2));//结果为:True, 第一个字符是0位,2是第三个字符。
17、char.IsPunctuation('字符') --逻辑型
查字符是否是标点符号如:Response.Write(char.IsPunctuation('A')); //返回:False
18、(int)'字符'
把字符转为数字,查代码点,注意是单引号。如:Response.Write((int)'中'); //结果为中字的代码:20013
19、(char)代码
把数字转为字符,查代码代表的字符。如:Response.Write((char)22269); //返回“国”字。
20、 Trim()
清除字串前后空格

一个使用JQuery来实现Ajax的例子

对JQuery的学习已经有一段时间了,最近做了一个Ajax的例子,因为环境原因,只能给出js部分,个人觉得这个Ajax的例子很有特点:包括了评论载入、添加评论、
//以动画形式展开/折叠评论内容
function zhankai(oDiv,othis)
{
//当前对象坐标
var offset=$(othis).offset();
var str=CreateTipDiv(offset.top,offset.left-200);
$("body").append(str);
//异步加载评论内容
$.ajax({
type: "POST",
url: "Services/CommentService.ashx",
dataType:"html",
data: "do=getlist&cAppContentId="+encodeURIComponent(oDiv),
success: function(commentInfo)
{
$("#ul_"+oDiv).html(commentInfo);
$("#loading").remove();
$("#"+oDiv).show("slow");

}
});

}
//折叠评论
function zhedie(id)
{
$("#" + id).hide("slow");
}
//创建加载评论提示层div
function CreateTipDiv(top,left)
{
return "
加载评论中,请稍等...
";
}
//提交评论
function SubmitComment(Id)
{
var commentInfo= $("#"+"ta_"+Id).html();
if(commentInfo.length==0)
{
alert("还没写东西哦!");
return false;
}
if(commentInfo.length>500)
{
alert("不好意思哦,我只能装500个字符!");
return false;
}
var userName=encodeURIComponent($("#hd_uname").val());
var uid=$("#hd_uid").val();
var newComment="
  • "+$("#hd_uname").val()+""+commentInfo+"
  • ";
    $.ajax({
    type: "POST",
    url: "Services/CommentService.ashx",
    //dataType:"json",
    data: "do=insert&uid="+uid+"&uname="+encodeURIComponent(userName)+"&cAppContentId="+encodeURIComponent(Id)+"&commentInfo="+encodeURIComponent(commentInfo),
    success: function(msg){
    var ulId="ul_"+Id;
    var whichStyle=$("#"+ulId+">li").length%2
    if(whichStyle==0)
    {
    $(newComment).appendTo("#"+ulId).effect("highlight", {color:"#ffff79"}, 2500) ;
    }
    else
    { //为偶数行,样式不同
    $(newComment).appendTo("#"+ulId).addClass("bg").effect("highlight", {color:"#ffff79"}, 2500) ;
    }
    var num =parseInt($("#pl_"+Id).text(),10)+1;
    $("#pl_"+Id).text(num);
    },
    error:function(ex)
    {
    alert(ex);
    }
    });
    }
    //根据新闻的ID获取评论数
    function GetCommentCountById(NewsId,oThis)
    {
    $.ajax({
    type: "POST",
    url: "Services/CommentService.ashx",
    data: "do=getcount&cAppContentId="+encodeURIComponent(NewsId),
    success: function(msg)
    {
    oThis.text(msg);
    }
    });
    }
    //页面加载完成后执行
    $(document).ready(
    function()
    {//循环,异步获取评论数
    $(".commentCount").each(
    function()
    {
    var NewsId=this.id.replace("pl_","");
    GetCommentCountById(NewsId,$(this));
    }

    );
    }
    );

    union排序, union查询中的排序,SQL Server

    微软的SQL Server中是不允许在union查询中使用 order by。可是如果你非要使用这样的功能,那也是可以实现的,只不过要绕弯路,而且将会损失很大的性能。
    一张艺术图书表BaseData_ArtBooks 和经济类图书表BaseData_ConomyBooks ,需要查询所有的图书信息,艺术图书排前面,经济类图书排后面,分别按字母顺序,则可能会想写一个这样的Sql语句:
    SELECT * FROM BaseData_ArtBooks order by BookName
    union all
    SELECT * FROM BaseData_ConomyBooks order by BookName
    使用上面的语句SQL Server是会报错的,union附加语法错误。
    解决这个办法,可以让order by 和union分开,不在同一个层级的查询语句, 让order在子查询内而union在外面:
    SELECT * FROM (SELECT * FROM BaseData_ArtBooks order by BookName) A
    union all
    SELECT * FROM (SELECT * FROM BaseData_ConomyBooks order by BookName) B
    上面的查询语句也是错误的,它违反了SQL Server子查询的语法规则: 如果不存在TOP语句则order by子句无效. 所以可以改成这样:
    SELECT * FROM (SELECT TOP 10 * FROM BaseData_ArtBooks order by BookName) A union all
    SELECT * FROM (SELECT TOP 10 * FROM BaseData_ConomyBooks order by BookName) B
    现在你可以使用了,不过这里再次提醒,如果数据量非常之巨大,那么效率将很低的!

    css样式控制标字数并且跟随省略号,css控制字数,省略号

    相信很多人都遇到这样的问题:如何利用css样式来控制,网站查了资料,发现都是给出下面这样的解释:
    .txt {width:120px; overflow:hidden; text-overflow:ellipsis;}
    “overflow:hidden;”是隐藏显示不下的部分;
    “text-overflow:ellipsis;”是尾部跟随省略号。
    这里一定要记住,必须设置宽度和行高,否则无法实现这样的效果。
    上面这样的做法没有考虑浏览器直接的兼容,应该做成这样:
    *html ul.aboutnews li { width:46%;height:22px;float:left;line-height:180%;word-break:break-all;overflow:hidden;}
    *+html ul.aboutnews li { width:46%;height:22px;float:left; line-height:180%;word-break:break-all;overflow:hidden;}

    谷歌中国创业3年之痒,Google中国[转自《中国文化报》]

      3年前,李开复带领谷歌风风火火地开始闯中国;然而,3年后,李开复依然是那个李开复,谷歌中国却至今没有火起来,只是缺少了作为一个跨国公司的霸气和锐气。
      2005年7月,经历了“7年之痒”的李开复动了挪窝的念头,毅然离开微软,加入谷歌。让李开复没有想到的是,他的挪窝引发了一场颇为轰动的官司。
      2005年7月20日,微软指控谷歌和微软前全球副总裁李开复违反了竞业禁止协议,认为李开复掌握微软的有关商业秘密,比如搜索技术及在中国的商业策略等,有可能损害微软在中国的商业利益,因此,要求获得经济赔偿。
      5个月之后,微软公司突然终止了对谷歌和李开复的诉讼,并表示:“三方已经达成非公开协议。”因为是“非公开”,外界对于协议的具体内容不得而知。
      今天再看那场官司,其结果已经不重要。重要的是,这场官司让谷歌和李开复名声大噪,为谷歌进军中国内地进行了很好的舆论造势。
      “强龙”难抗“地头蛇”
      2005年7月,李开复加盟谷歌,出任中国区总裁。与其他许多跨国公司一样,谷歌进入中国内地,也遇到了“水土不服”问题,业务的开展并没有之前想象得那么顺畅。最主要的原因是,中国有个本土的百度,致使谷歌这个后来者难以居上。
      为了改变困局,谷歌放弃了既定的高端路线,转而向低端市场倾斜,并且放下身段,在市场、渠道等方面采取了跟随百度的做法。但李开复并不承认百度是谷歌的竞争对手,他说:“谷歌做什么,与百度没有任何关系。我们和百度,谁做得好,用户自然会向谁倾斜。当用户发现另一家做得更好的时候,又会重新选择,两家公司的产品和服务会有重叠。”
      尽管百度的“竞价排名”引发了许多指责,甚至让百度惹上官司,但不可否认,这一模式让百度在中国搜索市场坐稳了老大的位置。短时间内,谷歌仍难做到与之分庭抗礼。
      是不务正业还是错位经营
      谷歌进入中国内地市场3年来,走得不急不躁,颇有些“胜似闲庭信步”的意思。而作为企业高管的李开复,却整日奔波于各大高校。他给学生们讲国外教育体制的利弊,还以自己为案例告诉大学生如何择业,学生们都非常喜欢听他的课。然而,他这么做,显然并不是仅仅喜欢教师职业这么简单。
      李开复毕竟是一个企业管理者,把大量的时间花在演讲上,看似不务正业,实则不然。如今,每天接触互联网的大学生比例越来越高。对于互联网企业而言,校园市场的价值就是一座金山。李开复不知疲倦地到校园演讲,无疑为谷歌拓展了潜在市场。
      难怪锡恩咨询有限公司总裁姜汝祥认为,李开复是在错位经营。他说:“李开复为什么花那么多工夫在学生身上?他是在培养新兴用户,他知道,未来互联网的主力军是大学生。从这点来看,他的错位经营的做法卓有成效。”
      2009盈利年,难而有望
      3年来,谷歌顺着搜索、盈利、创新的三步棋一路走来,效果似乎并不明显。
      “谷歌有自己的战略战术。”李开复说。从2007年开始,谷歌利用雄厚的资本实力和品牌号召力与一些门户网站结为战略联盟。此外,谷歌相继与中国移动、中国电信等企业建立了战略合作伙伴关系,并将政府有关机构纳入战略合作伙伴的行列。同时,谷歌开始大量投资或收购一批流量较大的本土网站,顺利拿到了ICP(互联网内容提供商)牌照,还通过植入广告搜索框,在客户端加入搜索工具条等获取盈利。不仅如此,谷歌还瞄准了门户网站,运用自己的技术优势,提供搜索技术与广告嵌入,顺利拿下腾讯、中华网等门户网站。这一连串的资本运作,让谷歌的流量比2007年增长了60%。
      按照李开复的计划,2006年是谷歌的“创业年”;2007年是谷歌的“产品年”;2008年是“普及年”;2009年,李开复认为应该是“盈利年”,虽然面临着种种挑战,但他依然坚信2009年是个收获的年份。
      金融危机席卷全球,经济进入下行阶段,李开复要实现自己的盈利计划,就目前来看,显然不是一件容易的事。

    select用法,sql server 2005,sql查询语句用法

    从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但其主要子句可归纳如下:
    SELECT select_list [ INTO new_table ]
    [ FROM table_source ] [ WHERE search_condition ]
    [ GROUP BY group_by_expression]
    [ HAVING search_condition]
    [ ORDER BY order_expression [ ASC DESC ] ]
    可在查询之间使用 UNION、EXCEPT 和 INTERSECT 运算符,以便将各个查询的结果合并或比较到一个结果集中。
    下面是几个简单的例子(以sql server数据库为例)
    1、select * from student;(返回student表中所有记录)
    2、select * from student where sname='张三' order by sno desc;(返回student表中名字是“张三”的所有记录,并且按照sno降序排序)
    3、select top 20 * from student order by sno desc;(返回student表中前20个记录,并且按照sno降序排序)
    4、select sname from student where score>90;(返回student表中分数大于90的所有学生姓名所有记录)

    2009年4月13日星期一

    FaceBook的API研究

    今天上午到公司后把昨天没有优化完的页面都做了优化,现在系统的性能得到了很大的提高(在本地测试比原来快了将近一半的速度)。然后开始研究facebook的App,facebook作为全球第一大网络社区,它的技术引导着未来互联网发展的方向,比如它的App,非常强大,第三方可以调用它的数据库资源和它提供的函数、可以发布自己个性化的应用程序,一个公司如果能够在facebook上做成功一个应用程序,那么带来的价值是巨大的。通过上午的研究,基本上对facebook app的开发有了大致了解。
    它主要提供两种方式开发APP:
    1、FBML(facebook自己定义的标记语言,它和xml是相通的,也不难学,不过目前用的不是很多);
    2、IFrame(这和我们平常用的IFrame是类似的,不过这里又分两种方式:
    (1)、直接嵌套第三方服务器上的页面。这种方式和我们现在在校内网发布的APP是一致的。
    (2)、使用FaceBook提供的函数库开发可以与FaceBook数据库),这里就需要在我们的页面上引入FaceBook的DLL,然后调用它提供的函数,主要是Post和Get之间的传递。
    现在有基于.NET平台的FaceBook.NET,它把facebook提供的方法融入了.NET,方便开发。当然,如果是轻量级的程序,我们完全可以自己直接调FaceBook中的方法。对于facebook的app,现在可以先之间像校内一样嵌入我们做做好的页面,下一步再做交户。
    下午还和编辑修改一些Bug和做新闻详细信息页面。

    金融危机之下一个IT公司领导对手下们的演讲

    还有十几个小时,我们就要与2008年说再见了,在2009年到来之前,我想郑重地向大家道一声:2008年大家辛苦了,感谢大家与公司风雨同舟,感谢大家的高度信任与默默地支持。
    2008年,我们以相对紧张的人手,相对小的资金投入,完成了优秀的业绩,今天,我们的网站已经进入了中国大陆地区所有网站排名的第367名,近一周全球排名是3080名,近一月是4109!而去年岁末,我们网站的排名还在2-3万名左右,这个进步是伟大的!是很不容易的!是值得骄傲的!祝贺大家取得的业绩,感谢所有为这个结果从不同角度做出的努力的人!
    2008年,大家确实很辛苦,从年初加班的封闭式开发,一直到年末的流量冲刺,我总能看到大家忙碌的身影,许多同事早出晚归,许多同事无偿地为工作牺牲了许许多多的休息时间,有的同事甚至多次带着病坚持工作,我相信大家如此辛劳,绝不仅仅是为了获得更高的报酬或者奖励,更重要的,是要一起创造一个成长快速的网站!一起创造一个值得期待的未来!
    站在2008岁末这个节点上回望这一年,我有许多感慨,我知道,因为工作任务重、人手紧缺、业务调整、人事调整、策略变化、经济环境、人员裁减等影响,大家的心情时而是沉重的,不安的,一边要面临繁重的、不得不做的工作,一边还要背负沉重的心理压力,甚至,有的同事已经与我们暂别,这些滋味我与大家感同身受, 很多时候,我面临的压力更大,甚至比大家更难受。欣慰的是,不管是已经离开公司的同事,还是留下来继续前进的同事,都对公司、对在线事业部、对我本人以及主管表现出了很大的理解与支持,这让我非常感动。
    对于那些已经离开的同事,我向郑重向你们道一声“对不起”和“谢谢”,谢谢你们曾经为公司所做的一切,这里永远记得你们!同时,也感谢你们对公司的理解。有一句话说:“分别是为了更好的相聚”,期待我们下一次的相聚。
    我昨晚彻夜读了一本书----斯宾塞·约翰逊的《礼物》,故事浅显,但道理很深,我把其中作者给我们的关于“现在、过去和未来”建议与大家分享一下(这本书很短,想看的同事可以找我来借):
    1、 把握此刻,专注于现在好的方面,并努力做好最重要的事情;
    2、 向过去学习,审视过去发生的事情,从中吸取经验教训,今天就采取不同的方法;
    3、 着手创造未来,想象一个美好的将来是什么样的,制订一个切实可行的计划,今天就做些事情使之成真;
    4、 明确你的目标,发掘让你的工作和生活更有意义的方法。
    同事们,寒冬并不可怕,因为它总会过去,度过寒冬的方式有很多种,让我们选择最积极、最乐观、最互信、最互助和最平和的方式。在困难没有到达之前,我们很难真正理解什么叫“风雨同舟”,我会排除一切杂念与机会,与大家共度这一段难关,并愿与大家一起珍藏这份可贵的经历;没有经历过风雨,我们也很难真正理解什么叫“阳光总在风雨后”,我也愿意与大家以种方式一起去期待更温暖的阳光。

    sql like用法,like效率,代码实现

    sql like用法,like效率,代码实现
    在开发过程中,我们经常用到like关键字,但是使用like进行匹配时,效率非常的低下,而环境逼迫情况下,却不得不用这个关键字。
    1、sql like用法
    like支持 ASCII 模式匹配和 Unicode 模式匹配。如果所有参数(match_expression、pattern 和 escape_character,如果存在)均为 ASCII 字符数据类型,则执行 ASCII 模式匹配。如果任何一个参数为 Unicode 数据类型,则所有参数都将转换为 Unicode,并执行 Unicode 模式匹配。当 Unicode 数据(nchar 或 nvarchar 数据类型)与 LIKE 一起使用时,尾随空格有意义;但对非 Unicode 数据,尾随空格则没有意义。Unicode LIKE 与 ISO 标准兼容。ASCII like与 SQL Server 的早期版本兼容。
    (1). LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、
    Stringer)。
    (2). LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、
    Green、McBadden)。
    (3). LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、
    Sheryl)。
    (4). LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson
    (如 Carson)。
    (5). LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字
    母开头的所有名称(如 Ringer)。
    (6). LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如
    MacFeather)。
    2、like效率
    如果数据量比较少like的效率不会很低,可是如果是在上百万乃至上千万条文本数据中进行like匹配时,所花时间在实际应用中往往不能接受的。
    根据自己的工作经验,总结了like的一些使用经验:
    如果只是长度不大的字符串,可以用建立索引的方式来提高查询的效率,也可以考虑使用charindex()函数来替代like。
    如果是大文本的数据,建议使用全文索引。

    设计模式:单件模式C#实现,源代码

    单件模式属于创建型模式,创造性模式主要是关注于如何以及何时创建对象。Singleton 模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点。在程序设计过程中,有很多情况需要确保一个类只能有一个实例。
    namespace Singleton.Design.Pattern
    {
    class Program
    {
    static void Main(string[] args)
    {
    //Singleton e = new Singleton(); 这是错误的,因为已经设定为保护类型了
    Singleton instance = Singleton.Instance();
    instance.Show();
    Console.ReadKey();
    }
    }
    public class Singleton
    {
    private static Singleton instance;
    protected Singleton()
    {
    }
    public static Singleton Instance()
    {
    if (instance == null)
    {
    instance = new Singleton();
    }
    return instance;
    }
    public void Show()
    {
    Console.WriteLine("Singleton is Show now!");
    }
    }
    }

    2009年4月12日星期日

    一个基于ASP.NET的网站管理系统CMS系统简要设计思想

    入职来做得最大的一件事就是开发了一个基于ASP.NET的网站内容管理系统,系统非常轻量级,基本满足了CMS系统的所有需求,而且使用很方便,本人觉得系统非常独特,而且易用,在开发过程中也参考了很多其他CMS系统(比如DeDe、PHPCms等),下面是简要设计思路:



    这个网站管理系统CMS系统来发布网站页面思想是:首先由设计师做好网站静态页面,然后使用CMS系统做好标签,最后把做好的标签嵌入到页面就可以完成动态页面的制作。
    爱读爱看CMS系统发布页面核心步骤有三个:1、定制内容板块;2、制作控件;3、合成标签。以下是内容板块、控件、标签和页面之间的互系:




    图1:内容板块、控件、标签、页面之间的关系
    从上图可以看到:内容板块就是数据,一般是由编辑们根据需求入库的,并且可以修改里面的任何信息;控件就是页面上的html标记和样式,一般是由设计师们设计好,每个控件都是静态页面里的一部分;标签是一个抽象出来的东西,由控件和内容板块两者合成,它的信息保存在数据库中,标签将会嵌入到页面上。

    c# params,params用法,代码

    在C#语言里,params 关键字可以指定在参数数目可变处采用参数的方法参数。
    把数组作为参数的一个关键字,目的是做出如 a(parm1,parm2.parm3,....parmn) ,这样调用方式的函数,也就是同一种类型的不定个数参数列表,如果声明时没用parms关键字就如下调用,实际上是一样的
    a(new type[]{parm1,parm2.parm3,....parmn});
    在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字,下面是具体示例代码:
    using System;
    public class MyClass
    {
    public static void UseParams(params int[] list)
    {
    for (int i = 0 ; i < list.Length; i++)
    {
    Console.WriteLine(list[i]);
    }
    Console.WriteLine();
    }
    public static void UseParams2(params object[] list)
    {
    for (int i = 0 ; i < list.Length; i++)
    {
    Console.WriteLine(list[i]);
    }
    Console.WriteLine();
    }
    static void Main()
    {
    UseParams(1, 2, 3);
    UseParams2(1, 'a', "test");
    // An array of objects can also be passed, as long as
    // the array type matches the method being called.
    int[] myarray = new int[3] {10,11,12};
    UseParams(myarray);
    }
    }

    sql union用法和sql union all用法,sql union效率

    sql union用法和sql union all用法,sql union效率
    1、sql union用法
    sql union在查询中可以将两个SQL 语句的结果合并起来。如果这样看的话, UNION 跟 JOIN 是相似的,两个指令都可以由多个表格中撷取资料。
    sql union的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。
    sql union只是将两个结果联结起来一起显示,并不是联结两个表,sql用法如下:
    两个表格, StoreData_200903 表格 StoreData_200904,这两张表格的数据结构是完全一样的,只是存放了不同月份的数据库(注意:这样做是为了能够分表,而且可以按月存档数据),现在需要联合查询,就是从两个表中查询出数据,SQL 语句:
    SELECT top 50 FROM StoreData_200903
    UNION
    SELECT top 50 FROM StoreData_200904
    2、sql union all用法
    sql union all这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 sql union all和 sql union不同之处在于 sql union all会将每一次符合条件的数据列出来,无论数据库有无重复。
    用法也很简单:
    SELECT top 50 FROM StoreData_200903
    UNION ALL
    SELECT top 50 FROM StoreData_200904
    值得注意的是,sql union all的执行效率要比sql union效率要高很多,这是因为,使用sql union需要进行排重,而sql union All 是不需要排重的,这一点非常重要,因为对于一些单纯地使用分表来提高效率的查询,完全可以使用sql union All。
    还有,如果使用了union,无论是sql union还是sql union all一定要记住对数据库表加上索引!

    面向对象必知:深入理解对象

    面向对象必知:深入理解对象
    上一节讲到了类,这次讲对象。一个类可以创建对象,对象可以操作类里面的方法,也可以操作类从父类继承的合法方法,还可以操作其他类的共用方法。
    在程序设计(这里都以C#语言为准)中的对象和人类世界中的是类似的,人类世界中每一个人都是一个对象,一个人有自己的姓名、身高等属性,一个人可以做很多事情,也受到很多约束;而程序设计里的对象就是模拟了人类世界的对象,一个对象必须要创建,这个对象在创建之时就确定了它的属性,这个对象可以有很多方法,这个对象受到访问权限的约束。
    人类生活在人类社会这个时间里,而对象生存在.NET中的CLR环境;人类在社会里受到法律、风俗等约束,对象在CLR里也同样有着自己的一套约定,比如类型、语法等。
    对象最为重要的是:有自己的属性(有如一个人的属性)、有自己可以访问的方法(有如一个人可以做的事情)、访问权限(有如一个人做什么事情受到的权限限制)。

    学习C#编程语言的几个阶段

    很多人在自己的简历里都写着精通C#编程语言,可是现实中真的有那么多高手吗?下面是李建忠(《Microsoft .NET框架程序设计》作者)对学习C#语言达到的境界的几个层次:
    1. 基本运用C#语法,在各种工具和示例代码的支持下,完成一些基本程序任务
    2. 熟练掌握面向对象与组件构造,知其然亦知其所以然,完成一般小规模信息管理类软件项目开发任务
    3. 深入理解CLR内核机制,对各种类型与.NET平台机制的优缺点、适用场合、效率有清晰把握,能够完成技术复杂度比较高的项目。
    4. 能够游刃有余把握松耦合原则,精准运用各种语言构造,架构大型软件项目。
    5. 能够站在计算机抽象、系统和历史发展的高度来理解和把握编程语言
    个人觉得自己只能够是出于2到3这个阶段。

    Google技术的发展对网站优化SEO的影响

    很多SEO们都知道,现在SEO已经不仅仅是关键词排名这么简单了。网站易用性,大量长尾关键词,网站结构等等,已经比个别关键词的排名更重要。但由于公司老板或客户的要求,又往往不得不把很大一部分精力放在关键词排名上。
    这种情况大概就快结束了。我估计如果Google在全球搜索引擎市场再领先5年,关键词排名和传统意义上的SEO就都快死了。
    这几年Google一直没闲着,虽然普通用户并看不出有多大翻天覆地的变化。但其实现在的Google搜索与前几年已经有很大不同了。带来的结果就是传统SEO就快失去意义,尤其是在两方面体现最明显。
    一是现在的SEO不得不把视线放到更多媒介,而不限于文字网页。第二,每个用户看到的搜索结果全都不一样,彻底瓦解传统SEO的基础。
    一年多前就写过整合搜索。现在整合搜索已经是大势所趋,而且搜索结果里出现的内容种类、次数越来越多,博客,新闻,视频,图片,图书等等经常出现在搜索结果页面,而且点击率比普通页面更高,因为排版格式使多媒体内容更突出。
    而这些网站内容往往无法受传统SEO的控制。以前点石就曾经申请过进入Google新闻源,但被拒绝,原因是点石不是一个正规组织,这已经不是我们做SEO的人说了算的了。
    图片、视频结果都能吸引大量流量,但也不是凭SEO人员就能有效完成的了。
    整合搜索结果越多,传统文字页面关键词排名占的比例就将越来越低。
    更要命的是,现在不同用户看到的搜索结果越来越不一样。以前是根据用户IP地址提供本地化的搜索结果。我在新加坡搜索“银行”,排在前面的就是新加坡银行。美国用户搜索,排在前面的就是美国银行。这很用户友好,所以不会消失了。
    后来又有了个性化搜索,Google对每个用户的搜索历史进行记录和判断,然后给出不同的搜索结果。前些天更是推出了SearchWiki,让用户可以从结果中删除特定网页,可以对结果重新排序。不知道以后还会推出什么个性化搜索的新机制。
    结果就是,SEO人员自己看到的搜索结果,与其他用户看到的是不一样的。公司老板、客户以及其他网站用户,搜索同一个关键词,得到的结果全都不一样。不存在固定排名,这关键词排名还怎么做?
    所以从长远来说,SEO必然脱离单纯的关键词排名,更多关注到怎样做一个对用户有用的网站。

    ASP.NET网站三层架构的理解

    还在大学的时候就学习了三层架构,可是到了这段时间才真正地对三层架构由一个全面的理解。
    1 界面层(UI)负责显示数据和接受用户操作
    2 业务层(BLL)负责处理数据的业务逻辑,如验证数据的合法性,进行一些数据计算等
    3 数据层(DAL)负责处理数据库操作,在数据库读取数据和对数据进行更新删除插入等操作。
    上面也仅仅是对概念的理解,其实我总结出来最为关键的是:表现层应该最简单,没有太多的后台代码;业务逻辑层对应的是业务逻辑实体,这里进行着非常复杂的业务逻辑操作判断(当然也可能很简单),比如事务处理等;数据层应该是非常简单的,太对应的是实体表,仅仅是一条条sql语句执行的操作,没有逻辑判断。最后,这三层应该是可以分离的!
    对于一个系统,如果能够把三层结构写的很好,那么完全可以做成代码生成工具。
    就像所有的企业级系统开发的.Net程序员一样,我也曾经苦苦挣扎于底层架构的搭建,如何一次性简单快速的搭建出足够前台调用的接口便成为一个欲罢不能的想法。参与了若干系统的开发之后,经过头脑风暴,我尝试着构建了一种简单的架构实现过程,在经过一些尝试后最终构建成功,并实施在我的一个解决方案当中了。
    写程序要有一个好习惯,就是坚持用尽量少的代码实现尽量多的事情,所以一般能共用的代码,我就写成共用的,这样基本上就减少了不少的代码量。另外,通过一定的抽象过程,开发出一个底层代码自动化工具才是最为可靠的。

    .NET内核揭秘

    这两年来,越来越多的国内软件企业开始深入.NET底层开发,我也接到了不少企业的深度.NET培训邀约,在培训课程方面也有较为成熟的积累。决定动笔写作《.NET内核揭秘》(暂定名)一书。目前大致蓝图如下:
    1. 对象里面到底装的是什么--揭秘.NET类型封装
    议题:程序构造的历史;代码段与数据段;对象、数据成员与函数成员;.NET对象到底有多大;.NET对象布局;简单值类型;string揭秘;数组揭秘…..
    2. 程序运行之来龙去脉 --揭秘CLR虚拟机执行系统
    议题:JIT编译如何进行;系统如何加载类型;堆栈模型;如何使用应用程序域隔离代码;异常如何层层抛出…..
    3. 对象的前生后世 --揭秘.NET类型继承
    议题:子类从父类继承了什么;子类与父类之间的类型关联;为什么可以将子类看作一个父类;静态类型与动态类型……
    4. 不要调用我,让我来调用你 --揭秘.NET多态机制
    议题:callvirt如何调用虚方法;虚方法表上都有什么;虚表指针什么时候使用;虚方法效率到底有多低….
    5. 数据与代码的博弈 --揭秘.NET委托调用
    议题:委托如何实现动态调用;委托类型内部构造;委托调用的效率;异步委托调用……
    6 托管对象的生与死 --揭秘.NET垃圾收集
    议题:垃圾收集器如何分配内存;垃圾收集器如何构造对象图;垃圾收集器如何搬移内存;垃圾收集器如何更新托管引用;垃圾收集器的性能到底如何…..
    7. 插上元数据的翅膀 -- 揭秘.NET反射机制
    议题:元数据是什么;元数据在哪里;如何反射类型;反射类型内部是什么;反射的效率到底有多低;反射的边界在哪里…..
    8. 运行时泛型的算盘 --揭秘.NET泛型实现
    议题:泛型类型到底是什么;泛型类型与元数据;泛型类型到底如何实例化;泛型的约束与效率…..
    如果这些问题是各位面临.NET所困惑的,我希望在本书中能够解答大家的疑惑。印象中有些读者对《.NET框架程序设计(修订版) 》深感不满,甚至有的大加鞭挞,感觉写的太浅。我想这本书能够满足这些读者的胃口。--不要误会,作为《.NET框架程序设计(修订版) 》早期的读者和译者,我对这本书当然心存敬意。我只是想以一种不同的视角来写作一本书,谈清楚一些模糊的东西。

    设计模式:简单工厂和工厂方法的C#实现

    设计模式中工厂方法包括了:简单工厂,工厂方法和抽象工厂,下面给出简单工厂和工厂方法的C#实现,你可以直接拷贝运行。
    namespace Factory.Design.Pattern
    {
    class Program
    {
    static void Main(string[] args)
    {
    //设计模式之简单工厂
    //LightSimpleFactory lsf = new LightSimpleFactory();
    //Light lsb= lsf.Create("Blue");
    //Light lsr = lsf.Create("Red");
    //lsb.TurnOn();
    //lsr.TurnOn();

    //设计模式之工厂方法
    CreatorMethod cb = new BlueCreator();
    CreatorMethod cr = new RedCreator();
    Light lb = cb.factory();
    Light lr = cr.factory();
    lb.TurnOn();
    lr.TurnOn();
    Console.ReadKey();
    }
    }
    public abstract class Light
    {
    public abstract void TurnOn();
    }
    public class BlueLight : Light
    {
    public override void TurnOn()
    {
    Console.WriteLine("Blue Light is turn on!");
    }
    }
    public class RedLight : Light
    {
    public override void TurnOn()
    {
    Console.WriteLine("Red Light is turn on!");
    }
    }
    #region 简单工厂
    public class LightSimpleFactory
    {
    public Light Create(string LightType)
    {
    switch (LightType)
    {
    case "Blue":
    {
    return new BlueLight();
    }
    case "Red":
    {
    return new RedLight();
    }
    default:
    {
    return null;
    }
    }
    }
    }
    #endregion
    #region 工厂方法
    public abstract class CreatorMethod
    {
    public abstract Light factory();
    }
    public class BlueCreator : CreatorMethod
    {
    public override Light factory()
    {
    return new BlueLight();
    }
    }
    public class RedCreator : CreatorMethod
    {
    public override Light factory()
    {
    return new RedLight();
    }
    }
    #endregion
    }

    2009年4月11日星期六

    C#语言编程常用知识介绍

    1)decimal,即十进制类型,是一种高精度、128位数据类型,它所表示的范围从大约1.0*10^-28到7.9*102^28的28至29位有效数字,注意该精度是以位数(digits)而不是以小数位(decimal places)来表示的。
    2)decimal类型的变量在赋值时要在值后面加m下标,否则将被编译器当作double类型处理。
    3)System.delegate 代表,引用类型,用于指向一个方法,定义方法:delegate int MyDelegate();
    4)多维数组定义一例:int[,] a=new int[,]{{1,2,3},{4,5,6}}
    5)多维数组定义另一例:int[][] b=new int[3][];b[0]=new int[]{1,2,3};b[1]=new int[]{1,2,3,4,5,6};b[2]=new int[]{1,2,3,4,5,6,7,8,9};
    6)可以在变量名前面加上@,这主要是为了在与其他语言交互时避免冲突,一般情况下不推荐使用。
    7)变量有以下以种:静态变量、非静态变量、数组元素、值能数、引用参数、输出参数、局部参数。
    8)常量const修饰符有:new,public,protected,internal,private。
    9)隐式枚举类型允许把十进制整数0转换为任何枚举类型,对应其他的整数则不存在这种隐式转换。
    10)显式转换有可能丢失信息或导致异常抛出。
    11)常量1.0默认为double类型,若要使用float型,可写成1.0f,即在数值后面加个f。
    12)在逻辑表达式的求值过程中,不是所有的逻辑操作符都被执行,这种情况称为“短路”。
    13)一般来说每个switch项都以break,goto case,goto default结束,但实际上任何一种不导致“遍历”的结构都是允许的。
    14)C#中提供了析构函数,用于专门释放被占用的系统资源;析构函数的名称为“~类名”,它不接收任何参数,不返回值,不能被继承;C#提供垃圾收集器帮助我们解决释放资源的工作。
    15) 方法修饰符可以是:new,public,protected,internal,private,static,virtual,sealed, override,abstract,extern。对于使用了abstract,extern修饰符的方法,方法的执行体仅仅只有一个简单的分号。其他的方法执行体应包含调用该方法所要执行的语句。
    16)方法参数四种类型:值类型(不需修饰符)、引用类型(以ref修饰符声明)、输出类型(以out修饰符声明)、数组型类型(以params修饰符声明)
    17)如果方法的形参表中包含了数组型参数,那么它必须在参数表中位于最后。另外,参数只允许是一维数组。比如:string[],string[][]类型都可以作为数组型参数,而string[,]则不能。最后,数组型参数不能再有ref和out修饰符。
    18)静态方法只能访问类中的静态成员。
    19)操作符重载方法:在定义类方法时,在方法名称后面加上“[空格]operator[空格][具体的操作符]”,如以下方法:public static Player operator ++(Player p){method body...}
    20)可重载的操作符:+,-,!,~,++,--,true,false,*,/,%,&,,^,<<,>>,==,!=,>,<,>=,<=。注:这里列出的操作符之间用“,”隔开。
    21)不可重载的操作符:=,&&,,?:,new,typeof,sizeof,is
    22)域的修饰符:new,public,protected,internal,private,static,readonly
    23) 属性的修饰符:new,public,protected,internal,private,static,virtual,sealed, override,abstract,以上修饰符中,static,virtual,override,abstract不能同时使用。
    24)事件的修饰符:new,public,protected,internal,private,static,virtual,sealed, override,abstract,以上修饰符中,static,virtual,override,abstract不能同时使用。
    25)构造函数和析构函数不能被继承。
    26)在派生类中覆盖基类中的方法时,在方法前面加上new关键字可关闭编译器的警告。
    27)base关键字主要是为派生类调用基类成员提供一个简写的方法。
    28)C#中的多态性有两种:编译时的多态性和运行时的多态性;编译时的多态性是通过重载实现的,运行时的多态性是通过虚成员实现的;编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度的灵活和抽象的特点。
    29)方法在使用了virtual修饰符之后,不允许再有static,abstract或override修饰符。
    30)在派生类中重新定义基类的虚方法时,要求方法名称、返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚方法完全一致。
    31)在派生类中声明对虚方法的重载,要求在声明中加上override关键字,而且不能有new,static或virtual修饰符。
    32)抽象类只能作为其他类的基类,不能被实例化。
    33)只能在抽象类中声明抽象方法,抽象方法不包含具体的实现内容,不能再使用static或virtual修饰符,不能出现{},如:public abstract void speak();
    34)抽象类中的抽象方法在派生类中不能使用base关键字来进行访问。
    35)可以利用抽象方法来重载基类的虚方法,这时基类中的虚方法的执行代码这被“拦截”了。
    36)密封类(使用sealed修饰符的类)不能被其他类继承。
    37)将方法密封可防止方法所在的类的派生类对该方法重载。
    38)不是类的每个成员方法都可以作为密封方法,密封方法必须对基类的虚方法进行重载,提供具体的实现方法。
    39)和类的成员方法一样,我们也可以定义属性的重载、虚属性、抽象属性、以及密封属性的概念。
    40)接口仅可以使用下列修饰符:new,public,protected,internal,private。
    41)接口的成员可以是属性、方法、事件和索引指示器。
    42)C#中类继承只允许单继承,但接口允许多继承,多个父接口之间用“,”隔开,被继承的接口应该是可以访问的,如从private类型和internal类型的接口中继承就是不允许的。
    43)接口成员的默认访问方式是public,接口成员不能包含任何修饰符。
    44)由于接口允许多继承,所以要注意接口成员的是否有二义性。
    45)显式接口成员只能通过接口调用。
    46)显式接口成员执行体不能使用任何访问修饰符。
    47)使用private,protected和static修饰符的成员不能参与实现接口映射。
    48)如果不显式地重新实现接口,派生类就无法改变从基类中继承来的接口映射。但是,当一个接口方法被映射到类的一个虚方法时,派生类就可以重载这个虚方法,并且改变这个接口的实现。
    49)继承了接口实现的类可以对接口进行重实现。
    50)有关接口的几个概念:显式接口成员执行体、
    50) 各个流:Stream,BinaryReader,BinaryWriter,File,Directory,FileStream, TextReader,TextWriter,StringReader,StringWriter,StreamReader,StreamWriter, BufferedStream,MemoryStream,NetworkStream;对网络文件进行操作使用IsolatedStorage类处理,不用流。

    Visual Studio 2003和Visual Studio 2005常用快捷键

    窗口快捷键
    Ctrl+W,W: 浏览器窗口
    Ctrl+W,S: 解决方案管理器
    Ctrl+W,C: 类视图
    Ctrl+W,E: 错误列表
    Ctrl+W,O: 输出视图
    Ctrl+W,P: 属性窗口
    Ctrl+W,T: 任务列表
    Ctrl+W,X: 工具箱
    Ctrl+W,B: 书签窗口
    Ctrl+W,U: 文档大纲
    Ctrl+D,B: 断点窗口
    Ctrl+D,I: 即时窗口
    Ctrl+Tab: 活动窗体切换
    Ctrl+Shift+N: 新建项目
    Ctrl+Shift+O: 打开项目
    Ctrl+Shift+S: 全部保存
    Shift+Alt+C: 新建类
    Ctrl+Shift+A: 新建项

    编辑快捷键
    Shift+Alt+Enter: 切换全屏编辑
    Ctrl+B,T / Ctrl+K,K: 切换书签开关
    Ctrl+B,N / Ctrl+K,N: 移动到下一书签
    Ctrl+B,P: 移动到上一书签
    Ctrl+B,C: 清除全部标签
    Ctrl+I: 渐进式搜索
    Ctrl+Shift+I: 反向渐进式搜索
    Ctrl+F: 查找
    Ctrl+Shift+F: 在文件中查找
    F3: 查找下一个
    Shift+F3: 查找上一个
    Ctrl+H: 替换
    Ctrl+Shift+H: 在文件中替换
    Alt+F12: 查找符号(列出所有查找结果)
    Ctrl+Shift+V: 剪贴板循环
    Ctrl+左右箭头键: 一次可以移动一个单词
    Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
    Ctrl+Shift+L: 删除当前行
    Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
    Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态
    Ctrl+M,P: 停止大纲显示
    Ctrl+E,S: 查看空白
    Ctrl+E,W: 自动换行
    Ctrl+G: 转到指定行
    Shift+Alt+箭头键: 选择矩形文本
    Alt+鼠标左按钮: 选择矩形文本
    Ctrl+Shift+U: 全部变为大写
    Ctrl+U: 全部变为小写

    调试快捷键
    F6: 生成解决方案
    Ctrl+F6: 生成当前项目
    F7: 查看代码
    Shift+F7: 查看窗体设计器
    F5: 启动调试
    Ctrl+F5: 开始执行(不调试)
    Shift+F5: 停止调试
    Ctrl+Shift+F5: 重启调试
    F9: 切换断点
    Ctrl+F9: 启用/停止断点
    Ctrl+Shift+F9: 删除全部断点
    F10: 逐过程
    Ctrl+F10: 运行到光标处
    F11: 逐语句

    代码快捷键
    Ctrl+J / Ctrl+K,L: 列出成员
    Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息
    Ctrl+K,I: 快速信息
    Ctrl+E,C / Ctrl+K,C: 注释选定内容
    Ctrl+E,U / Ctrl+K,U: 取消选定注释内容
    Ctrl+K,M: 生成方法存根
    Ctrl+K,X: 插入代码段
    Ctrl+K,S: 插入外侧代码
    F12: 转到所调用过程或变量的定义

    读《深入浅出MFC》和设计模式有感

      这个学期开学初是进入大学最黑暗的时候,在打击后,我还是老老实实看书,图书馆已经是我的乐园。三月份过来,把《深入浅出MFC》和《设计模式》(就是美国“四人帮”写的那本)都通读了一遍,期间读了许多关于面向对象方法、分析和设计的书,就如我同学说的一样,“我发现了新的天地”。
      软件设计,我最终还是选择了,其实与其说是我选择,不如说是被迫的,或者可以用我的话说是“抵制不住市场经济的诱惑”。但我知道我是为了自己的梦想,虽然已经不再是儿时的那个纯粹的梦想,但是这已经不重要了,因为真的是“理想如果不向实际做点妥协,理想就会归于尘土”,但我清楚现在最主要的还是如小熊说的“打扎实基础”。
      读《深入浅出MFC》,感想很多,不想在这里谈什么体会(因为会是很粗陋的),还是引用书中打动自己的话以做些纪念:

    “ 程序设计领域里,每一个人都想飞;
    但是,还没学会走之前,连跑都别想!”

    “ C++是一种扭转程序员思维模式的语言;
    一个人思维模式的扭转,不可能轻而易举一蹴而就!”

    “ 如果MFC是箭,
    Visual C++ IDE(集成开发环境)便是弓,
    强壮的弓,让箭飞得更远!”

    “ 只用一样东西,不明白它的道理,实在不高明。
    演化(evolution)永远在进行,
    这个世界却不是每天都有革命(revolution)发生,
    Application Framework在软件界确实称得上具有革命精神。”

    “ 带艺术气息的软件创作行为将在Application Framework出现后逐渐成为工匠技术,
    而我们都将成为软件IC装配厂里的男工女工,
    但,不是亨利.福特,我们有如何能够享受大众化的汽车,
    或许以后会出现“纯手工精制”的软件,
    可我自己从来不嫌机器馒头难吃!”

    “ 消息映射机制与命令传递,
    活像是米若托斯的迷宫,
    是MFC最曲折幽深的神秘地带!”

    数学与应用数学专业介绍,顺便给数学院学生的建议

    数学与应用数学专业是一个已经开设了很久的专业,国家教育部在这个学科的教育研究上积累了很多极为宝贵的经验,大学在上个世纪五十年代就开设了数学与应用数学专业,在培养人才上有很丰富的经验,在科研上也取得许多优秀的成果,现在该专业已经成功获得了设立博士点的资格。
    数学与应用数学专业是一个厚基础、宽口径并注重一定工程实践训练的理科专业,设置有应用数学与应用软件专业、计算数学与应用软件专业两个方向。本专业的学生主要学习数学与应用数学的基础理论、基本方法,受到数学模型、计算机和应用软件方面的基本训练,具有较好的科学素养。数学与应用数学专业开设了大量的数学课程和跟软件开发的相关课程,这些课程都由优秀的教授来上课。
    大一学习最重要最基础的数学专业基础课,任课教师水平都很高,这些课程直接请博士生导师(至少是硕士生导师)上课,教学质量相当高;大二开设学习数学专业课程,最主要的有三门专业必修课:数学模型、运筹学和数学软件,前两门课程对培养学生应用数学能力和很大的帮助,后一门课程让学生懂得利用强大的数学软件去解决应用问题,还有其他一些课程是专业基础课程,对学生未来学习作用非常大;大三主要是专业选修课,学生可以根据自己的需要和自己的人生规划来选择这些课程,如果以后想从事软件开发的可以多选计算机软件开发相关的课程,如果想读研究生或者以后从事科研可以多选数学相关的课程。大四还有一些专业选修课(如何选择跟大三的原则一样),另外还有一个很重要的任务,就是做毕业设计。
    学生在大二的时候还可以参加目前全国最大的大学生课外科技竞赛--全国数学建模比赛,这是一项将数学知识直接应用到实际问题的比赛,参与者可以得到各方面的训练,对未来的发展有非常大的作用,用参加过的前辈们的话就是“一次参加,终岁受益”,而且获得全国奖的可以免试保送研究生,大学在数学建模比赛成绩也是非常好的,每年都有好几个队获全国奖。
    目前大学本科正在越来越注重基础教育,许多家长希望自己的孩子本科毕业后继续就读研究生。如果在大学本科阶段把数学与应用数学专业学好了,也就是把研究生(除了数学专业)课程中的数学专业都学好了,在读研或者进行更高的深造的时候非常轻松。所以现在一些有见识的家长都选择让自己的孩子在本科阶段先读数学与应用数学,把基础打好。现在大学里很多非数学院的导师都希望数学院的学生报考他们的研究生,也非常欢迎数学专业的学生在读研究生的时候在他们院读。
    即使不想读研究生,数学与应用数学专业也是一个很值得选择的专业,因为这个专业和计算机联系非常密切,本专业开设的关于计算机软件方面的课程和计算机专业基本一样(可能比计算机专业还多),学生通过数学思维的训练和熏陶之后从事软件开发是非常有前途的,目前在计算机应用领域中很强的人要么都是应用数学系毕业或者数学功底非常好的人。就算不从事软件开发,通过本专业的培养,可以很大地提高学生在工作后的后劲力,因为大学阶段已经把实际中常用到的几乎所有数学理论都疏通了,实际工作遇到的话应付起来就得心应手了。
    当然本专业有一个特点就是开设课程比较多,学习也比较困难,但这并不影响学好这个专业。在大学,有优秀的教师和丰富的图书馆资源,如果脚踏实地跟老师好好学习,是几乎每个人都可以学好的(用老师的话说:以能考上大学的人的智商都可以学好)。来到数学学院,来到数学与应用数学专业后,找到自己的定位,发现自己的热爱,然后踏踏实实把每一个步走稳,毕业的时候,你就会发现自己真的实现人生理想了。

    sql模糊查询用法

    在开发过程中,我们经常用到sql语句中的sql模糊查询,下面就详细介绍sql模糊查询用法:
    SQL模糊查询的语法为SELECT * FROM table WHERE column LIKE ' ' 。
    SQL提供了四种匹配模式:
    1. % 表示任意0个或多个字符。如下语句:
    SELECT * FROM user WHERE name LIKE ';%三%';
    将会把name为“张三”,“三脚猫”,“唐三藏”等等有“三”的全找出来;
    2. _ 表示任意单个字符。语句:
    SELECT * FROM user WHERE name LIKE ';_三_';
    只找出“唐三藏”这样name为三个字且中间一个字是“三”的;
    SELECT * FROM user WHERE name LIKE ';三__';
    只找出“三脚猫”这样name为三个字且第一个字是“三”的;
    3. [ ] 表示括号内所列字符中的一个(类似与正则表达式)。语句:
    SELECT * FROM user WHERE name LIKE ';[张李王]三';
    将找出“张三”、“李三”、“王三”(而不是“张李王三”);
    如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
    SELECT * FROM user WHERE name LIKE ';老[1-9]';
    将找出“老1”、“老2”、……、“老9”;
    如要找“-”字符请将其放在首位:';张三[-1-9]';
    4. [^ ] 表示不在括号所列之内的单个字符。语句:
    SELECT * FROM user WHERE name LIKE ';[^张李王]三';
    将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
    SELECT * FROM user WHERE name LIKE ';老[^1-4]';
    将排除“老1”到“老4”寻找“老5”、“老6”、……、“老9”。
    由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”、“';”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
    function sqlencode(str)
    str=replace(str,"';","';';")
    str=replace(str,"[","[[]") ';此句一定要在最先
    str=replace(str,"_","[_]")
    str=replace(str,"%","[%]")
    sqlencode=str
    end function
    在查询前将待查字符串先经该函数处理即可。

    C#最常用函数

    以下是我们在开发过程中最为常用的一些函数:
    1、DateTime 数字型
    System.DateTime currentTime=new System.DateTime();
    1.1 取当前年月日时分秒
    currentTime=System.DateTime.Now;
    1.2 取当前年
    int 年=currentTime.Year;
    1.3 取当前月
    int 月=currentTime.Month;
    1.4 取当前日
    int 日=currentTime.Day;
    1.5 取当前时
    int 时=currentTime.Hour;
    1.6 取当前分
    int 分=currentTime.Minute;
    1.7 取当前秒
    int 秒=currentTime.Second;
    1.8 取当前毫秒
    int 毫秒=currentTime.Millisecond;
    (变量可用中文)

    2、Int32.Parse(变量) Int32.Parse("常量")
    字符型转换 转为32位数字型

    3、 变量.ToString()
    字符型转换 转为字符串
    12345.ToString("n"); //生成 12,345.00
    12345.ToString("C"); //生成 ¥12,345.00
    12345.ToString("e"); //生成 1.234500e+004
    12345.ToString("f4"); //生成 12345.0000
    12345.ToString("x"); //生成 3039 (16进制)
    12345.ToString("p"); //生成 1,234,500.00%

    4、变量.Length 数字型
    取字串长度:
    如: string str="中国"
    int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名

    5、System.Text.Encoding.Default.GetBytes(变量)
    字码转换 转为比特码
    如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
    然后可得到比特长度:
    len = bytStr.Length;

    6、System.Text.StringBuilder("")
    字符串相加,(+号是不是也一样?)
    如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
    sb.Append("中华");
    sb.Append("人民");
    sb.Append("共和国");

    7、变量.Substring(参数1,参数2);
    截取字串的一部分,参数1为左起始位数,参数2为截取几位。
    如:string s1 = str.Substring(0,2);

    8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
    取远程用户IP地址

    9、穿过代理服务器取远程用户真实IP地址:
    if(Request.ServerVariables["HTTP_VIA"]!=null){
    string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
    }else{
    string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
    }

    10、 Session["变量"];
    存取Session值;
    如,赋值: Session["username"]="小布什"

    取值: Object objName=Session["username"];
    String strName=objName.ToString();
    清空: Session.RemoveAll();

    提高.NET性能的十大方法

    第一、返回多个数据集
      如果你是用动态的SQL语句来返回多个数据集,那我建议你用存储过程来替代动态的SQL语句。是否把业务逻辑写到存储过程中,这个有点争议。但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不用在过滤数据,这是一个好事情。
      用SqlCommand对象的ExecuteReader方法返回一个强类型的业务对象,再调用NextResult方法来移动数据集指针来定位数据集。示例一演示了一个返回多个ArrayList强类型对象的例子。只从数据库中返回你需要的数据可以大大的减小你的服务器所耗用的内存。
    第二、对数据进行分页
      一个好的解决方案是写一个分页的存储过程,例子2是一个用于对Northwind数据库orders表的分页存储过程。你只需要传当前页码,每页显示的条数两个参数进来,存储过程会返回相应的结果。
      在服务器端,我专门写了一个分页的控件来处理数据的分页,在这里,我用了第一个方法,在一个存储过程里面返回了两个结果集:数据记录总数和要求的结果集。
      返回的记录总数取决于要执行查询,例如,一个where条件可以限制返回的结果集的大小。因为在分页界面中必须要根据数据集记录的大小来计算总的页数,所以必须要返回结果集的记录数。例如,如果一共有1000000条记录,如果用where条件就可以过滤成只返回1000条记录,存储过程的分页逻辑应该知道返回那些需要显示的数据。
    第三、使用连接池
      要用连接池优化,有两条规则,第一,打开连接,处理数据,然后关闭连接。如果你必须在每次请求中多次打开或关闭连接,这好过一直打开一个边接,然后把它传到各个方法中。第二,用相同的连接字符串(或者用相同的用户标识,当你用集成认证的时候)。如果你没有用相同的连接字符串,如你用基于登录用户的连接字符串,这将不能利用连接池的优化功能。如果你用的是集成的论证,因为用户很多,所以你也不能充分利用连接池的优化功能。.NET CLR提供了一个数据性能计数器,它在我们需要跟踪程序性能特性的时候非常有用,当然也包括连接池的跟踪了。
      无论你的应用程序什么时候要连在另一台机子的资源,如数据库,你都应该重点优化你连资源所花的时间,接收和发送数据的时间,以及往返回之间的次数。优化你的应用程序中的每一个处理点(process hop),它是提高你的应用的性能的出发点。
      应用程序层包含与数据层连接,传送数据到相应的类的实例以及业务处理的逻辑。例如,在Community Server中,要组装一个Forums或者Threads集合,然后应用业务逻辑,如授权,更重要的,这里要完成缓存逻辑。
    第四、充分利用ASP.NET缓存机制
      如果你的组件是要在Asp.net应用程序中运行,你只要把System.Web.dll引用到你的项目中就可以了。然后用HttpRuntime.Cache属性就可访问Cache了(也可以通过Page.Cache或HttpContext.Cache访问)。
      有以下几条缓存数据的规则。第一,数据可能会被频繁的被使用,这种数据可以缓存。第二,数据的访问频率非常高,或者一个数据的访问频率不高,但是它的生存周期很长,这样的数据最好也缓存起来。第三是一个常常被忽略的问题,有时候我们缓存了太多数据,通常在一台X86的机子上,如果你要缓存的数据超过800M的话,就会出现内存溢出的错误。所以说缓存是有限的。换名话说,你应该估计缓存集的大小,把缓存集的大小限制在10以内,否则它可能会出问题。在Asp.net中,如果缓存过大的话也会报内存溢出错误,特别是如果缓存大的DataSet对象的时候。
    第五、预请求缓存
      虽然Cache设计成用来保存某段时间的数据,而预请求缓存只是保存某个时期的某个请求的内容。如果某个请求的访问频率高,而且这个请求只需要提取,应用,修改或者更新数据一次。那么就可以预缓存该请求。我们举个例子来说明。
      在CS的论坛应用程序中,每一个页面的服务器控件都要求得到用于决定它的皮肤(skin)的自定义的数据,以决定用哪个样式表及其它的一些个性化的东西。这里面的某些数据可能要长时间的保存,有些时间则不然,如控件的skin数据,它只需要应用一次,而后就可以一直使用。
      要实现预请求缓存,用Asp.net 的HttpContext类,HttpContext类的实例在每一个请求中创建,在请求期间的任何地方都可以通过HttpContext.Current属性访问。HttpContext类有一个Items集合属性,在请求期间所有的对象和数据都被添加到这个集合中缓存起来。和你用Cache缓存访问频率高数据一样,你可以用HttpContext.Items缓存那些每个请求都要用到的基础数据。它背后的逻辑很简单:我们向HttpContext.Items中添加一个数据,然后再从它里面读出数据。
    第六、后台处理优化
      你只要简单的把下面的这一行代码复制到你的页面中就可以实现了:<%@ PageOutputCache VaryByParams=”none” Duration=”60” %> 你就可以有效的利用第一次请求里生成的页面输出缓存内容,60秒后重新生成一道页面内容。这种技术其实也是运用一些低层的Cache API来实现。用页面输出缓存有几个参数可以配置,如上面所说的VaryByParams参数,该参数表示什么时候触发重输出的条件,也可以指定在Http Get或Http Post 请求模式下缓存输出。例如当我们设置该参数为VaryByParams=”Report”的时候,default.aspx?Report=1或者default.aspx?Report=2请求的输出都会被缓存起来。参数的值可以是多个用分号隔开参数。
      许多人都没有意识到当用页面输出缓存的时候,asp.net也会生成HTTP头集(HTTP Header)保存在下游的  虽然用页面输出缓存不提高你的应用程序性能,但是它能减少了从的服务器中加载已缓存页面内容的次数。当然,这仅限于缓存匿名用户可以访问的页面。因为一旦页面被缓存后,就不能再执行授权操作了。
    第八、 用IIS6.0的Kernel Caching
      如果你的应用程序没用运行在IIS6.0(windows server 2003)中,那么你就失去了一些很好的提高应用程序性能的方法。在第七个方法中,我讲了用页面输出缓存提高应用程序的性能的方法。在IIS5.0中,当一个请求到来到IIS后,IIS会把它转给asp.net,当应用了页面输出缓存时,ASP.NET中的HttpHandler会接到该请求,HttpHandler从缓存中把内容取出来并返回。
    第九、 用Gzip压缩数据
      除非你的CPU占用率太高了,才有必要用提升服务器性能的技巧。用gzip压缩数据的方法可以减少你发送到服务端的数据量,也可以提高页面的运行速度,同时也减少了网络的流量。怎么样更好的压缩数据取决于你要发送的数据,还有就是客户端的浏览器支不支持(IIS把用gzip压缩后的数据发送到客户端,客户端要支持gzip才能解析,IE6.0和Firefox都支持)。这样你的服务器每秒能多响应一些请求,同样,你也减少了发送响应的数据量,也就能多发送一些请求了。
      好消息,gzip压缩已经被集成在IIS6.0中了,它比IIS5.0中gzip更好。不幸的是,在IIS6.0中启用gzip压缩,你不能在IIS6.0的属性对话中设置。IIS开发团队把gzip压缩功能开发出来了,但他们却忘了在管理员窗口中让管理员能很方便的启用它。要启用gzip压缩,你只能深入IIS6.0的xml配置文件中修改它的配置。
    第十、 合理选择服务器控件的ViewState
      ViewState是asp.net中的一个特性,它用于把生成页面要用的一状态值保存在一个隐藏域中。当页面被回传到服务器时,服务器要解析,校验和应用ViewState中的数据以还原页面的控件树。ViewState是一个非常有用的特性,它能持久化客户端的状态而不用cookie或者服务器的内存。大部分的服务器控件都是用ViewState来持久化那些在页面中与用户交互的元素的状态值。例如,用以保存用于分页的当前页的页码。
      用ViewState会带来一些负面的影响。首先,它加大的服务器的响应和请求的时间。其次,每次回传时都增加了序列化和反序列化数据的时间。最后,它还消耗了服务器更多的内存。

    2009年4月10日星期五

    JQuery页面加载顺序

    JQuery页面加载顺序
      JQuery在页面加载顺序方面提供了更好更合理的操作,在JavaScript中,window.onload事件下的代码是必须在所有页面元素都加载完成之后才执行(注意:包括了图片和文件等),可是有的时候我们希望hmtl代码加载完成之后(即DOM加载完成之后)就执行某些代码,在JQuery里有这样的函数:
    $(document).ready(function(){
       alert("hello");
      });
    上面的代码在Dom结构被浏览器解析之后就可以执行了。当然也有其他人使用JavaScript来编写一些函数可以实现这样的功能,只不过JQuery更好。另外,使用这样的函数还有一个好处,就是可以基于同一个页面在加载结束之后执行多个脚本函数。

    2009年4月9日星期四

    IE下页面只有一个text回车将自动submit提交

    IE下页面只有一个text回车将自动submit提交

    这是IE的一个缺陷,不过还是有解决的办法的:

    1、解决办法一:再增加一个text,然后隐藏这个text;

    2、解决办法二:可以在这个页面的form里面加上onsubmit="return false;" 。

    面向对象程序设计必知:深入理解类

    面向对象必知:深入理解类
    “人以类聚”,这个成语说明了类的概念,在面向对象设计中的类也是如此,一个类是一组东西的抽象,类可以有抽象出来的类(抽象类),也可以是具体的类,抽象类往往都有具体类,具体类负责实现抽象类定义的方法。一个类,里面定义了属于这个类别的东西共同拥有的属性和方法,比如Duck鸭子类,里面有叫声,羽毛等鸭子都有的属性,有游泳,叫等鸭子都有的方法。
    在C#里类还分静态类和非静态类,最大的区别是静态类里必须都是静态方法,静态类必须用类名去访问里面的方法,静态类是编译时就确定的;非静态类必须先创建一个实例对象,然后才能去访问类里的成员和方法,非静态类是动态绑定的,也就是在执行的时候才确定要执行什么方法。
    类有修饰它的关键字:Public、Protected,Private。这几个关键字代表的意思是:
    1、Public:公共的类,这个类可以在外面的类被访问到;
    2、Protected:私有的类,这个类可以在继承它的类被访问到;
    3、Private:私有的类,这个类不能在任何其他外面的被类访问到。

    谷歌音乐免费直捣百度软肋[转自《中国文化报》]

      音乐搜索,谷歌完成中国行动
      4月1日,歌迷“小光”发现,谷歌中国首页的搜索框下方出现了一个蓝色的圆点搜索图标“音乐”,它排在“视频、图片、生活、地图”之后。让他感到兴奋的是,这个音乐频道不仅能搜到蔡依林最新专辑《花蝴蝶》,就连当天刚出版发行的许巍作品辑《今天》都能在线收听和下载。
      实际上,从3月30日起,中国网民就可以在谷歌的音乐搜索频道里在线收听和下载35万首歌曲,之后,已经签约的110万首歌曲会陆续加入。对于中国网民来说,这不过是互联网上又一道美味的免费午餐,但对谷歌中国来说,在“不作恶”和“巨大流量诱惑”之间做一个平衡,用去了整整两年的时间。
      据CNNIC报告显示,截至2008年年底,中国网民规模达到2.98亿人,其中有2.49亿人经常在线收听和下载音乐,网络音乐使用率高达83.7%。庞大的市场需求为搜索网站带来巨大的流量和用户。
      然而,由于版权等因素,谷歌一直没有推出音乐搜索服务。而且,除中文搜索技术外,谷歌在中国推出的很多本土化产品的表现都不尽如人意。与此同时,谷歌的竞争对手百度却凭借着MP3搜索获得了巨大的流量。有调查显示,百度在音乐搜索市场的份额一度高达92.8%。
      “MP3搜索是谷歌中国产品惟一的缺口。” 谷歌大中华区总裁李开复说。面对如此热火朝天的音乐搜索市场,在中国饱受流量、业绩压力的谷歌和一心想在中国市场有所作为的李开复显然都不能无动于衷。“经过两年多的时间,我们终于找到了一个‘正版+免费’的模式来提供高质量的音乐搜索。”两年里,谷歌中国投资巨鲸音乐网,与全球四大唱片公司、140多家独立唱片公司、国际四大词曲出版商和中国音乐著作权协会建立了合作关系。目前,谷歌的音乐搜索服务只面向中国市场开放。
      正版免费,直捣百度软肋
      “页面简洁清爽,没有死链接,点击就能下载。”数字音乐从业者“ugmbbc”在第一时间体验了谷歌音乐搜索服务。同“ugmbbc”一样,很多网友在使用之后,对谷歌音乐搜索给予了较好的评价。
      这似乎也印证了谷歌的初衷——在“正版+免费”的新模式下,用户可以获得好的体验。而且这种模式使得唱片公司以授权的方式维护版权并享有广告分成,从而得到了唱片行业的支持。国际唱片业协会(IFPI)亚洲区主任莱翁表示:“这表明你可以做正确的事情,是一个合法的服务。”
      与谷歌相比,百度音乐搜索却一直得不到唱片行业的理解和认同。这部分是因为百度不区分是否为正版,其搜索引擎覆盖范围是整个互联网上的音频文件,从而获取了巨大的流量。在很多唱片公司看来,这是一种打擦边球的方式,在推动网络音乐产业发展的同时,也让盗版音乐得以大肆横行。因此,百度的MP3搜索业务备受争议,长期深陷来自音乐公司的版权纠纷和诉讼。2008年,中国音乐著作权协会、中国音像著作权集体管理协会、国际唱片业协会和环球、华纳、索尼、BMG等唱片公司分别因版权问题将百度诉至法庭。面对唱片公司相继发难,百度抛出著名的“菜刀论”,认为自己只为网民提供搜索结果,但无法判断搜索到的东西是否侵权。根据《信息网络传播权保护条例》,百度可以适用“通知+删除”的版权避风港,以致每次版权纠纷无一不以百度的胜利而告终。然而,版权问题始终是百度迈不过去的一道坎。
      “正版乃大势所趋,这将给百度音乐搜索带来较大冲击。”在谷歌推出正版音乐搜索的当天,某业内评论家认为,谷歌音乐搜索正版免费直捣百度软肋,在吸引用户流量方面不容小觑。但也有业内人士认为,谷歌音乐目前要挑战百度的霸主地位多少显得有些底气不足。一方面,谷歌音乐自身的产品服务有待完善。比如,歌曲资源与百度相比太少,仅有MP3格式的音乐文件,而且搜到的信息全部跳转至巨鲸音乐网。“万一巨鲸音乐网出了问题,那所有音乐链接不都成死链接了吗?”网友“小苏”显得有些担心。另一方面,百度MP3搜索已经培养起用户习惯,而百度知道、贴吧和空间等关联性产品线也把用户牢牢拴住。“谷歌要想让百度MP3用户改变原有习惯,进行大迁移,还需做好打持久战的准备。”业内一资深人士如是说。
      竞争有益,探索市场方向
      在音乐搜索领域,谷歌无疑是个后来者,与百度的竞争谁胜谁负,尚无定数。不过,谷歌音乐的出现起码让网民多了一个选择。同时,谷歌“用音乐的感觉搜索音乐”的技术理念和创新,也为更好的音乐搜索用户体验提供了可能。
      此外,这场竞争给了唱片公司一张制衡百度的牌,或将促使百度加大与唱片公司合作的决心与力度。“我们与谷歌合作的同时,仍然会继续与百度打官司。”华纳音乐亚太区新媒体和商务拓展副总裁张健表示,在与百度解决目前的音乐搜索官司后,他愿意与百度实现类似谷歌音乐搜索这样的合作。事实上,百度也在为化解版权困扰而采取积极行动。在与包括英皇、华谊等在内的70多家唱片公司达成版权协议的同时,百度数字音乐联盟歌曲试听页面也已接到首个千万级广告大单。

    关于数据库优化

    虽然创建一个数据库数据库非常简单,数据库查询语句也只有Select、Insert、Update、Delete这几个很简单的操作,但是要真正地让数据库发挥重大作用,并且能够提供数据库负载能力,必须做数据库优化。
    数据库的优化对于数据库的性能影响是巨大的,而对于数据库的优化最为重要的是:数据库设计架构(数据库读写分离)是否合理,数据库索引是否合理,数据库分表是否合理、数据库查询语句是否合理。
    这段时间做的项目数据量巨大,数据库文件已经接近了10G,整个数据库的记录数也达到了接近1亿条,这样带来了很多的问题。对于这样巨大的数据库,我们有自己的策略:
    1、实行数据库分表:把每一个月的数据存放起来,每个月数据有60万条,共三张大表(都是60万条记录数),这样很大缓解了数据库的压力;
    2、施行了读写分离:对已经不需要改版的数据库表进行存档;
    3、建立合理的索引:我们每个月都对数据库进行索引重设,根据sql语句对CPU、磁盘IO的使用情况来设定表的索引;
    4、建立了一套数据库缓存机制:目前仅仅是在IIS做缓存,不过已经考虑使用Memcached缓存。
    通过上面的这些策略,目前能够抗住网站日均300万的PV。

    网站优化SEO规范之网站结构和链接

    增加外部链接
    简例:网站页面增加外部链接可以有效提高页面在SEO的权重,在链接标题中加入相关关键字能更好的提高这个网页关键字的权重。
    URL 的目录层次和长度
    简例:目录越少,长度越短,越好分析,链接带关键字能增加权重。
    站内链接 链接到的页面要包含关键字。
    简例:包含URL内容关键字的标题
    确保站内链接有效,没有死链接,错链接。
    简例:N/A
    树形结构,任何一个页面最好两层之内就可到达,各级页面保持链接
    简例:一级:首页二级:专题,频道,列表,搜索 三级:底级内容页
    站内链接,在最终页增加互相引用,实现站内交叉营销。
    简例:各种相关内容,推荐内容。
    尽量少使用Iframe frame AJAX DHTML来控制页面内容。
    简例:N/A
    面包屑结构和树状结构结合有助于搜索引擎分析链接。
    简例:首页》小说》言情系列
    链接地址是否正规
    链接是否采用标准HTML标签,Javascript 的 location跳转或服务器端的跳转URL, 搜索引擎无法分析链接。
    网页内容和关键字是否相关
    简例:关键字与内容相关才能被搜索引擎重视
    内容独特,原创
    简例:独特的原创内容受搜索引擎重视,复制网页会受惩罚
    经常更新
    简例:更新越频繁,搜索引擎来访越频繁。更新收录越快
    页面存活期比较长
    简例:网页有效期长
    门页
    简例:过多链接其他网站的内容的页面,被搜索引擎认为作弊
    Iframe frame ajax js flash的影响
    简例:搜索引擎无法分析到以上技术控制的内容,搜索引擎收录的是纯HTML.

    全国大学生数学建模比赛经验(四)

    紧张的准备之后便是三天三夜的挑战了,比赛的过程中我们并没有为选题浪费时间,因为准备之间我们已经基本将目标定为了统计问题,因此选题过程中我根本没花时间来把另外一道题看懂。三天三夜不仅是对知识能力的考验也是对体力的考验,尤其是最后一天绝对要保证要有足够的精力可以通宵。在竞赛的过程中,资料搜索与自学能力夜具有相当重要的作用,出现的问题不可能总是我们熟悉的,需要用到的方法也不一定就是我们会用的,这时搜索能力的作用便会体现出来。这次国赛中我们所用到的多水平分析便是我们以前根本就没见过的,可是它却比许多已经了解的方法更加专业、更有说服力,于是我们便采用了这种方法。资料搜索到之后能不能很好的利用便是自学能力的问题了。为了能够在竞赛中更快的找到资料在准备过程中资料与资料库的积累是很重要的,准备好了一个丰富的资料库往往可以节省大量的搜索时间;而自学能力也需要在准备过程中进行必要地培养。

    上面一直再说统计问题与数据分析,也说一下优化问题,上面说了这么多统计问题是因为我们将准备的重点放在了统计类问题,而不是统计方法比优化重要,比之统计问题多采用数据分析法,优化问题更重要的是机理分析,优化常采用的软件则为Lingo、MATLAB,解决问题的算法有经典的三大算法:模拟退火法、神经网络、遗传算法,统计问题与优化问题有时并没有明显的界限,往往二者结合成为统计优化问题,二者使用的软件与算法也没有很严格的区分。Mathematic、MATLAB便是二者通用的软件,一些算法如神经网络也可以在二者之间通用。

    数模之后的另外一点感受:
    进入大学选择了数学,到底数学能够作些什么?对于我们以后的工作有什么用?我一直都感觉到很迷茫,直到学了数学建模、参加了数学建模竞赛才知道数学原来还可以这么用、数学还可以用来做这些。世界的每一个角落都充满着数学,从我们每天走过的马路为什么修的这么宽、分为几条道、交通灯的红绿黄灯为什么有的每次亮30几妙,有的亮20几秒,有的只亮几秒,到经济市场的运行管理,再到火箭升天,无一不是充满着数学。数学是一种知识,数学更是一种思维,是一种以数字的眼光看世界的思维。一个复杂的现实的问题经过数字化、模型化往往变的清晰而且简单。

    全国大学生数学建模比赛经验(三)

    数模的赛题一般是以社会,经济,管理,环境,自然现象等现代科学中出现的新问题为背景的比较确切的现实问题,给出若干假设条件,要求给出问题的优化解决方案或预测结果等。根据问题要求题目可分为优化问题、统计问题或者二者结合的统计优化问题,优化问题一般需要对问题进行优化求解找出最优或近似最优方案,统计问题一般具有大量的数据需要处理,寻找一个好的处理方法非常重要。在数模培训结束的后期准备中应该适当地考虑选题的方向,以确定下一步准备的重点方向,集中精力向某一方向准备,若二者兼顾则精力分散难以进行比较深入的准备。

    培训结束后,我们队每人都有自己的任务与计划,我看了几篇前几届的获奖论文,开始从他们的论文中寻找问题的解决方法。记得我看了一篇 DNA序列分类和一篇长江水质评价的的论文,这两篇文章里面都用到了主成分分析法和其他一些统计学的方法,并且这两篇文章的原题都给出了大量的数据,需要采用适当的方法来进行处理,我再次感觉到了统计学的重要性,于是我查了一些资料又到图书馆借了一本《应用多元统计》,这本书对多元统计的方法进行了比较全面的讲解,更重要的是里面给出了一些例子并且给出SPSS实现的方法,因此这本书使我学到了很多,虽然竞赛中用到的其中的方法不多,但却增加我对统计学的了解。
    在上面已经提到过数学建模注重对知识的应用,因此作为一个短期内的准备学会对知识的应用比弄懂它的原理更加重要,前人的研究已经为我们做好了铺垫,他们的研究成果也已经集成到了软件里面,因此能不能很好的应用软件对一个问题的解决起着决定的作用,在统计学方面常用的软件便是SPSS,当然在竞赛中MATLAB在统计学问题上也有较多的应用,SPSS是界面化的操作,MATLAB则采用函数调用。

    全国大学生数学建模比赛经验(二)

    经过了前几次的练习,我认为数模问题的解决要靠合理的方法,对事务的评价要有明确合理的标准,解决的方法和评价的标准要让别人承认而不是我们自己认为对就行的,让别人承认就要有让别人承认的理由,我们想当然的自说自话是没有任何说服力的,培训开始时我们做的第一篇是“超女”广告策划问题研究,题目要求给出观看“超女”比赛观众群体结构特征,得出各个因素对“超女”热衷如何进行影响,对这些看起来比较抽象的话题如何来解决呢?当时我们并不知道如何来定这些标准,我们就自己给它随便定个标准吧,只要我们自己认为合理就写吧,论文算是基本写完了,可是我们所订的的这些标准如何让别人来承认合理呢?记得当时铁道的一个队用了多元线性回归,单因素、双因素方差分析的方法来处理,先不说如何进行处理,听到这方法就有一种专业、可信的感觉,当然做的结果也不错,相比之下我们自己定义的标准是好是坏又如何说得清楚呢?拼命的解释了半天却不如别人几句话就说请了。这当然不是说我们不能自己定义评价的标准,只要我们能够说得清楚,能够证明我们的合理性,当然也可以自己定义。

    在我们合作作第一篇论文的时候,我们就注意到了寻找一个合理的依据对于解决问题的重要性,于是我们决定开始学习知识、积累方法,而我就开始寻找数据处理方面的方法依据,统计学是一个针对数据处理的学科,由于我们数学院大二并没有开概率统计课程,因此我就开始从基本的概率统计开始学起,我先从大学数学的概率统计看起,而没有选择看针对数学理论的概率统计,其实后来证明这样也是必要的,因为1、理科类的概率理论讲解较多,难以看懂,我们时间太短,很难把这么多概率统计的知识看完看懂;2、数学建模强调应用而不注重理论,因此在一个短期准备的计划中,了解与能够应用才是最重要的,至于原理与理论基础可于有充足时间的时候再作详细研究。

    数模的培训对于竞赛具有重要作用,但培训的结束并不意味着准备工作的结束,相反这才是真正准备的开始,培训期间需要听课、做练习,可能很累,并且可以自己把握的时间不多,因此培训结束后需要认真地做好下一步的计划与安排,找到自己地长处,发展自己的个性。